@mxtommy/kip 4.7.0 → 4.8.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.
Files changed (50) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +3 -0
  3. package/README.md +37 -29
  4. package/package.json +23 -34
  5. package/plugin/history-series.service.js +108 -11
  6. package/plugin/index.js +170 -44
  7. package/plugin/kip-series-contract.js +18 -1
  8. package/plugin/openApi.json +75 -7
  9. package/public/3rdpartylicenses.txt +0 -26
  10. package/public/assets/help-docs/contributing-widgets.md +40 -0
  11. package/public/assets/help-docs/dashboards.md +8 -0
  12. package/public/assets/help-docs/menu.json +4 -2
  13. package/public/assets/svg/icons.svg +48 -1
  14. package/public/assets/svg/symbols.svg +68 -0
  15. package/public/{chunk-PKB75FW2.js → chunk-2TP7C66X.js} +1 -1
  16. package/public/chunk-3SJSLBCV.js +6 -0
  17. package/public/chunk-5SMHTIVS.js +50 -0
  18. package/public/{chunk-E3ROX3JL.js → chunk-6ISGIPNP.js} +1 -1
  19. package/public/chunk-6ZR3M3IQ.js +3 -0
  20. package/public/{chunk-6LPU67GV.js → chunk-ACY7HYMZ.js} +1 -1
  21. package/public/{chunk-E3VC75HO.js → chunk-C23GLDFH.js} +1 -1
  22. package/public/{chunk-W5RYIISE.js → chunk-CB4E7PPA.js} +1 -1
  23. package/public/{chunk-JL7DODKZ.js → chunk-DNM5XUIF.js} +1 -1
  24. package/public/{chunk-2BKBAKG4.js → chunk-GSM7FZE2.js} +2 -2
  25. package/public/{chunk-OBMTAHXF.js → chunk-HF7V6XFA.js} +1 -1
  26. package/public/{chunk-2BY2XRFX.js → chunk-HUCDJ6CS.js} +7 -7
  27. package/public/{chunk-CSJ2TU72.js → chunk-ILQQCGMJ.js} +1 -1
  28. package/public/chunk-IXUKD73N.js +5 -0
  29. package/public/{chunk-BMEO4VRV.js → chunk-JMZYPL54.js} +1 -1
  30. package/public/chunk-KG4C6HZC.js +1 -0
  31. package/public/{chunk-UBBLNNPA.js → chunk-LEY6MANN.js} +13 -13
  32. package/public/chunk-NS2OV2OW.js +9 -0
  33. package/public/{chunk-3JK476CX.js → chunk-O5BTKN5D.js} +1 -1
  34. package/public/{chunk-PDJFHMII.js → chunk-Q32FSCUX.js} +1 -1
  35. package/public/{chunk-3B5RVPSS.js → chunk-SHJMXSDM.js} +1 -1
  36. package/public/{chunk-GWAFO3MC.js → chunk-T4VTC6GW.js} +1 -1
  37. package/public/{chunk-GHPW4BPE.js → chunk-VFJD3XKT.js} +1 -1
  38. package/public/{chunk-KHZPPOSI.js → chunk-VFZSH4TC.js} +1 -1
  39. package/public/{chunk-S4UHQERA.js → chunk-W6MCE3GH.js} +1 -1
  40. package/public/index.html +1 -1
  41. package/public/main-UBENKC2D.js +1 -0
  42. package/public/polyfills-BWA36QKG.js +1 -0
  43. package/public/chunk-B2CYEVGO.js +0 -9
  44. package/public/chunk-HIXACNNV.js +0 -6
  45. package/public/chunk-QN4XMV3X.js +0 -50
  46. package/public/chunk-U5QHLGHD.js +0 -1
  47. package/public/chunk-WYC65OAX.js +0 -5
  48. package/public/chunk-XFHXLFTX.js +0 -3
  49. package/public/main-WGYSOKJC.js +0 -1
  50. package/public/polyfills-L4FJGPOC.js +0 -2
@@ -0,0 +1,50 @@
1
+ import{$ as As,A as bs,B as po,C as Ji,D as Hl,E as ys,F as nr,G as ql,H as ar,I as or,J as go,K as fo,L as $l,M as jl,N as vo,O as rr,P as Yl,Q as $u,R as ju,S as Yu,T as ia,U as na,V as bo,W as Dt,X as aa,Y as oa,Z as yo,_ as Ku,a as ei,aa as Cs,b as fi,ba as Xu,c as Fi,ca as Zu,d as Fu,da as ra,e as Bu,ea as An,f as Gu,g as gs,h as zu,i as Uu,j as Hu,k as qu,l as St,m as ka,n as Zi,o as ea,p as Da,q as Rn,r as bn,s as yn,t as Qi,u as ta,v as Ci,w as fs,x as vs,y as ho,z as Ea}from"./chunk-NS2OV2OW.js";import{a as Wu,b as ps,c as vi}from"./chunk-W6MCE3GH.js";import{a as Qu,b as Ju,c as em,d as tm,e as im}from"./chunk-JMZYPL54.js";import{a as jt,b as gi,c as He,e as Ao,f as Co}from"./chunk-ACY7HYMZ.js";import{a as Iu,b as Pu,c as Ru,d as mo,e as Nu,f as Rt,g as Ou,h as Vu,k as Lu,m as ir,o as J,p as Ul,r as st}from"./chunk-IXUKD73N.js";import{b as Au,e as Cu,f as us}from"./chunk-VFJD3XKT.js";import{a as Li,b as Wi}from"./chunk-HF7V6XFA.js";import{a as Su,b as wu,c as _u,d as fn,e as pi,g as Mu,h as Pi,i as Ri,j as Ni,k as Kn,l as Qt,n as At,o as Qn,p as Du,q as Jn,s as Eu,u as Ct,v as qt,w as xt,x as $t}from"./chunk-ILQQCGMJ.js";import{A as Xn,B as ro,C as Oi,D as so,E as Pn,F as Vi,G as lo,H as co,I as Jt,J as rt,K as uo,L as vn,M as Pt,O as Zn,P as Ot,Q as yt,a as Di,b as Hc,d as Yt,e as Ei,f as fu,i as cs,j as vu,k as bu,l as yu,m as Ht,n as gn,o as ms,p as bt,r as mt,t as ot,u as Mt,v as Tu,w as Xi,x as hs,y as ku,z as We}from"./chunk-2TP7C66X.js";import{$ as zr,$a as Xr,$b as Lt,Aa as Rc,Ab as zt,Ad as rs,Ba as Ie,Bb as ye,Bc as z,Be as lu,Cb as Ae,Cc as L,D as xc,Da as hi,Db as R,Dc as Wc,Dd as ao,De as du,E as Sc,Ea as Je,Eb as d,Ec as Fc,Ee as cu,Fb as u,Fc as ft,Fe as uu,Ga as w,Gb as O,Gc as x,H as xa,Ha as W,Hb as D,Hc as he,I as Fr,Ia as dn,Ib as G,Id as oo,Ie as mu,J as wi,Jb as ee,Jc as ns,Je as hu,K as _i,Kb as un,La as nt,Lb as mn,Lc as ki,Ld as Zc,Le as pu,Mb as Jr,Nb as we,Nc as It,O as wc,Ob as ji,Od as Qc,P as qn,Pb as $,Pd as Ta,Pe as gu,Q as mi,Qa as Yr,Qb as Jo,Qd as jn,Qe as De,Ra as Kr,Rb as T,Rd as Jc,Re as Ii,S as _c,Sa,Sb as es,Se as xu,T as Mc,Tb as ts,Td as zl,Te as je,U as Br,Ub as is,Ud as ss,Ue as Xe,V as Gr,Vb as $n,Vd as eu,Wa as f,Wb as Mi,Xb as Ti,Xc as Bc,Xd as Ki,Ya as Nc,Yc as Gc,Z as Tc,Za as Oc,Zb as _e,Zc as zc,Zd as pn,_ as kc,_b as Me,a as Z,aa as Ur,ab as wa,ac as Te,ad as as,b as ge,ba as Dc,bc as dt,bd as hn,ca as to,cc as _a,ce as tu,d as u0,da as Hr,db as Zr,dc as ct,dd as io,de as iu,e as fc,ea as qr,ec as c,ee as _t,f as Le,fa as $r,fc as Q,fd as Uc,fe as ls,g as eo,ga as Ec,gb as H,gc as be,ge as Yn,ha as Ic,hb as cn,hc as Ut,he as nu,ib as Gt,ie as vt,j as Fl,jb as Qr,k as Zt,ka as jr,kb as Vc,kc as Mn,ke as ds,la as gt,lb as Qo,lc as Tn,ld as qc,le as et,m as sn,ma as ln,mb as Ai,mc as kn,md as $c,n as vc,nb as Lc,nc as Ma,nd as jc,ne as au,oa as _n,oc as Dn,pc as En,q as bc,qa as A,qc as Yi,r as yc,rc as Gl,rd as Yc,re as ou,s as Bl,sc as er,se as ru,t as Ac,ta as Pc,tc as tr,td as os,ud as Kc,va as ne,vb as ie,vc as ut,vd as Xc,w as Wr,wa as ae,wc as Et,x as Hn,xa as oe,xb as I,xc as In,xd as no,y as Cc,ya as Ue,yb as P,z as si,za as Zo,zb as Re,ze as su}from"./chunk-LEY6MANN.js";var Vd=u0((zW,gl)=>{(function(n){"use strict";function a(g){if(Array.isArray(g)){for(var p=0,b=Array(g.length);p<g.length;p++)b[p]=g[p];return b}return Array.from(g)}function e(g,p){if(!g)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!p||typeof p!="object"&&typeof p!="function"?g:p}function t(g,p){if(typeof p!="function"&&p!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof p);g.prototype=Object.create(p&&p.prototype,{constructor:{value:g,enumerable:!1,writable:!0,configurable:!0}}),p&&(Object.setPrototypeOf?Object.setPrototypeOf(g,p):g.__proto__=p)}function i(g,p){if(!(g instanceof p))throw new TypeError("Cannot call a class as a function")}function o(g,p){if(p||(p=typeof window>"u"?global:window),p[g]!==void 0)return p[g];if(Lr===null){var b=window.getComputedStyle(document.documentElement,"");Lr=(Array.prototype.slice.call(b).join("").match(/-(moz|webkit|ms)-/)||b.OLink===""&&["","o"]||["",""])[1]}if(Lr==="")return null;var M=g.charAt(0).toUpperCase()+g.substr(1),k=p[Lr+M];return k!==void 0?k:null}function r(g,p,b,M,k,V,q){if(typeof M!="function")throw new TypeError("Invalid animation rule:",M);var K=g-b,Y=K/k,X=0;Y>1&&(Y=1),Y!==1&&(X=M(Y),isFinite(X)&&!isNaN(X)&&(Y=X)),p&&p(Y),K<k?q.frame=uc(function(fe){return r(fe,p,b,M,k,V,q)}):(V&&V(),q.inProgress=!1)}function s(){Array.prototype.constructor.apply(this,arguments)}function l(g){if(!(g instanceof DOMException&&g.result===2152923147))throw g}function m(g,p){return p.replace(l0,function(b,M){var k=g[M];return k!==void 0?k:b})}function h(g){return g.majorTicks instanceof Array||(g.majorTicks=g.majorTicks?[g.majorTicks]:[]),g.majorTicks.length||(g.majorTicks.push(ke.formatMajorTickNumber(g.minValue,g)),g.majorTicks.push(ke.formatMajorTickNumber(g.maxValue,g))),[g.tickSide!=="right",g.tickSide!=="left"]}function v(g,p,b,M,k,V){g.beginPath(),g.moveTo(p+V,b),g.lineTo(p+M-V,b),g.quadraticCurveTo(p+M,b,p+M,b+V),g.lineTo(p+M,b+k-V),g.quadraticCurveTo(p+M,b+k,p+M-V,b+k),g.lineTo(p+V,b+k),g.quadraticCurveTo(p,b+k,p,b+k-V),g.lineTo(p,b+V),g.quadraticCurveTo(p,b,p+V,b),g.closePath()}function y(g,p){var b=p.valueDec,M=p.valueInt,k=0,V=void 0,q=void 0,K=void 0;if(g=parseFloat(g),K=g<0,g=Math.abs(g),b>0){for(q=g.toFixed(b).toString().split("."),V=M-q[0].length;k<V;++k)q[0]="0"+q[0];q=(K?"-":"")+q[0]+"."+q[1]}else{for(q=Math.round(g).toString(),V=M-q.length;k<V;++k)q="0"+q;q=(K?"-":"")+q}return q}function C(g,p){var b=void 0,M=!1;return b=p.majorTicksDec===0?Math.round(g).toString():g.toFixed(p.majorTicksDec),p.majorTicksInt>1?(M=~b.indexOf("."),~b.indexOf("-")?"-"+[p.majorTicksInt+p.majorTicksDec+2+(M?1:0)-b.length].join("0")+b.replace("-",""):[p.majorTicksInt+p.majorTicksDec+1+(M?1:0)-b.length].join("0")+b):b}function S(g){return g*Math.PI/180}function _(g,p){return{x:-g*Math.sin(p),y:g*Math.cos(p)}}function F(g,p,b,M){var k=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],V=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,q=g.createLinearGradient(k?0:V,k?V:0,k?0:M,k?M:0);return q.addColorStop(0,p),q.addColorStop(1,b),q}function E(g,p){p.needleShadow&&(g.shadowOffsetX=2,g.shadowOffsetY=2,g.shadowBlur=10,g.shadowColor=p.colorNeedleShadowDown)}function N(g,p,b){return g["font"+p+"Style"]+" "+g["font"+p+"Weight"]+" "+g["font"+p+"Size"]*b+"px "+g["font"+p]}function U(g){g.shadowOffsetX=null,g.shadowOffsetY=null,g.shadowBlur=null,g.shadowColor="",g.strokeStyle=null,g.lineWidth=0,g.save()}function j(g,p,b,M){p.valueTextShadow&&(g.shadowOffsetX=b,g.shadowOffsetY=b,g.shadowBlur=M,g.shadowColor=p.colorValueTextShadow)}function B(g,p,b,M,k,V){if(p.valueBox){U(g);var q=p.valueDec?1+p.valueDec:0,K="9".repeat(Math.max.apply(null,[String(parseInt(b)).length+q].concat(p.majorTicks.map(function(Ke){return String(parseInt(Ke,10)).length+q})))),Y=p.valueText||y(b,p),X=V/200,fe=V/100,ve=.4*fe,Ee=1.2*fe;g.font=N(p,"Value",X),j(g,p,ve,Ee);var Pe=g.measureText(p.valueText?Y:"-"+y(Number(K),p)).width;U(g);var Ve=parseFloat(p.fontValueSize)*X+ve+Ee,it=fe*parseFloat(p.valueBoxStroke),Oe=2*V-2*it,Ze=Pe+10*fe,Qe=1.1*Ve+ve+Ee,at=fe*p.valueBoxBorderRadius,$e=(parseFloat(p.valueBoxWidth)||0)/100*Oe;$e>Ze&&(Ze=$e),Ze>Oe&&(Ze=Oe);var Ye=M-Ze/2,ze=k-Qe/2,Ne=k-5.75*fe;if(g.beginPath(),at?v(g,Ye,ze,Ze,Qe,at):g.rect(Ye,ze,Ze,Qe),it){var Fe=g.createRadialGradient(M,Ne,10*fe,M,Ne,20*fe);Fe.addColorStop(0,p.colorValueBoxRect),Fe.addColorStop(1,p.colorValueBoxRectEnd),g.strokeStyle=Fe,g.lineWidth=it,g.stroke()}p.colorValueBoxShadow&&(g.shadowBlur=1.2*fe,g.shadowColor=p.colorValueBoxShadow),p.colorValueBoxBackground&&(g.fillStyle=p.colorValueBoxBackground,g.fill()),g.closePath(),g.restore(),j(g,p,ve,Ee),g.fillStyle=p.colorValueText,g.textAlign="center",g.textBaseline="alphabetic",g.fillText(Y,Ye+Ze/2,k+Qe/2-Ve/3),g.restore()}}function re(g){var p=g.value,b=g.minValue,M=g.maxValue,k=.01*(M-b);return{normal:p<b?b:p>M?M:p,indented:p<b?b-k:p>M?M+k:p}}function pe(g,p,b,M,k){b.beginPath(),b.arc(0,0,$i(g),0,2*Ko,!0),b.lineWidth=p,b.strokeStyle=k?ke.linearGradient(b,M,k,g):M,b.stroke(),b.closePath()}function te(g,p){var b=qi.pixelRatio;return g.maxRadius||(g.maxRadius=g.max-p.borderShadowWidth-p.borderOuterWidth*b-p.borderMiddleWidth*b-p.borderInnerWidth*b+(p.borderOuterWidth?.5:0)+(p.borderMiddleWidth?.5:0)+(p.borderInnerWidth?.5:0)),g.maxRadius}function se(g,p){function b(ve,Ee,Pe,Ve,it,Oe){return Ee&&(!Oe&&p.borderShadowWidth&&(Pe.save(),Pe.shadowBlur=p.borderShadowWidth,Pe.shadowColor=p.colorBorderShadow),pe(ve,Ee*M,Pe,Ve,it),!Oe&&p.borderShadowWidth&&(Oe=!0,Pe.restore())),Oe}var M=qi.pixelRatio,k=p.borderShadowWidth*M,V=g.max-k-p.borderOuterWidth*M/2,q=V-p.borderOuterWidth*M/2-p.borderMiddleWidth*M/2+.5,K=q-p.borderMiddleWidth*M/2-p.borderInnerWidth*M/2+.5,Y=te(g,p),X=void 0,fe=!1;g.save(),fe=b(V,p.borderOuterWidth,g,p.colorBorderOuter,p.colorBorderOuterEnd,fe),fe=b(q,p.borderMiddleWidth,g,p.colorBorderMiddle,p.colorBorderMiddleEnd,fe),fe=b(K,p.borderInnerWidth,g,p.colorBorderInner,p.colorBorderInnerEnd,fe),!fe&&p.borderShadowWidth&&(g.shadowBlur=p.borderShadowWidth,g.shadowColor=p.colorBorderShadow),g.beginPath(),g.arc(0,0,$i(Y),0,2*Ko,!0),p.colorPlateEnd?(X=g.createRadialGradient(0,0,Y/2,0,0,Y),X.addColorStop(0,p.colorPlate),X.addColorStop(1,p.colorPlateEnd)):X=p.colorPlate,g.fillStyle=X,g.fill(),g.closePath(),g.restore()}function de(g,p){if(p.highlights!=="false"&&p.highlights.length&&p.highlightsWidth!==0){var b=g.max*(parseFloat(p.highlightsWidth)||0)/100,M=$i(ue(g,p)-b/2),k=p.highlights.length,V=(p.maxValue-p.minValue)/p.ticksAngle;g.save();for(var q=0;q<k;q++){var K=p.highlights[q];g.lineWidth=b,g.lineCap=p.highlightsLineCap,g.strokeStyle=K.color,g.beginPath(),g.rotate(Wl),g.arc(0,0,M,ke.radians(p.startAngle+(K.from-p.minValue)/V),ke.radians(p.startAngle+(K.to-p.minValue)/V),!1),g.stroke(),g.closePath(),g.restore(),g.save()}g.restore()}}function ce(g,p){var b=ue(g,p),M=void 0,k=void 0,V=void 0,q=0,K=Math.abs(p.minorTicks)||0,Y=p.ticksAngle/(p.maxValue-p.minValue);p.exactTicks?(k=p.maxValue-p.minValue,M=K?k/K:0,q=(rn.mod(p.majorTicks[0],K)||0)*Y):M=K*(p.majorTicks.length-1),g.lineWidth=qi.pixelRatio,g.strokeStyle=p.colorMinorTicks||p.colorStrokeTicks,g.save();for(var X=0;X<M;++X)(V=p.startAngle+q+X*(p.ticksAngle/M))<=p.ticksAngle+p.startAngle&&(g.rotate(ke.radians(V)),g.beginPath(),g.moveTo(0,b),g.lineTo(0,b-.075*g.max),qe(g));g.restore()}function ue(g,p){var b=g.max/100;return te(g,p)-5*b-(p.barWidth?2*(parseFloat(p.barStrokeWidth)||0)+((parseFloat(p.barWidth)||0)+5)*b:0)}function me(g,p){ke.prepareTicks(p);var b=$i(ue(g,p)),M=void 0,k=p.majorTicks.length,V=qi.pixelRatio;g.lineWidth=2*V,M=p.colorMajorTicks instanceof Array?p.colorMajorTicks:new Array(k).fill(p.colorStrokeTicks||p.colorMajorTicks);for(var q=0;q<k;++q)g.save(),g.strokeStyle=M[q],g.rotate(ke.radians(Se(p,p.exactTicks?p.majorTicks[q]:q,k))),g.beginPath(),g.moveTo(0,b),g.lineTo(0,b-.15*g.max),g.stroke(),g.closePath(),g.restore();p.strokeTicks&&(g.save(),g.strokeStyle=p.colorStrokeTicks||M[0],g.rotate(Wl),g.beginPath(),g.arc(0,0,b,ke.radians(p.startAngle),ke.radians(p.startAngle+p.ticksAngle),!1),g.stroke(),g.closePath(),g.restore())}function Se(g,p,b){if(g.exactTicks){var M=g.ticksAngle/(g.maxValue-g.minValue);return g.startAngle+M*(p-g.minValue)}return g.startAngle+p*(g.ticksAngle/(b-1))}function qe(g){g.stroke(),g.restore(),g.closePath(),g.save()}function pt(g,p){var b=ue(g,p)-.15*g.max,M={},k=0,V=p.majorTicks.length,q=p.animationTarget!=="needle",K=p.colorNumbers instanceof Array?p.colorNumbers:new Array(V).fill(p.colorNumbers),Y=q?-(p.value-p.minValue)/(p.maxValue-p.minValue)*p.ticksAngle:0;for(q&&(g.save(),g.rotate(-ke.radians(Y))),g.font=ke.font(p,"Numbers",g.max/200),g.lineWidth=0,g.textAlign="center",g.textBaseline="middle";k<V;++k){var X=Y+Se(p,p.exactTicks?p.majorTicks[k]:k,V),fe=g.measureText(p.majorTicks[k]).width,ve=p.fontNumbersSize,Ee=Math.sqrt(fe*fe+ve*ve)/2,Pe=ke.radialPoint(b-Ee-p.numbersMargin/100*g.max,ke.radians(X));X===360&&(X=0),M[X]||(M[X]=!0,g.fillStyle=K[k],g.fillText(p.majorTicks[k],Pe.x,Pe.y))}q&&g.restore()}function tt(g,p){p.title&&(g.save(),g.font=ke.font(p,"Title",g.max/200),g.fillStyle=p.colorTitle,g.textAlign="center",g.fillText(p.title,0,-g.max/4.25,.8*g.max),g.restore())}function Bt(g,p){p.units&&(g.save(),g.font=ke.font(p,"Units",g.max/200),g.fillStyle=p.colorUnits,g.textAlign="center",g.fillText(ke.formatContext(p,p.units),0,g.max/3.25,.8*g.max),g.restore())}function ri(g,p){if(p.needle){var b=p.animationTarget!=="needle",M=p.ticksAngle<360?ke.normalizedValue(p).indented:p.value,k=b?p.startAngle:p.startAngle+(M-p.minValue)/(p.maxValue-p.minValue)*p.ticksAngle;p.barStartPosition==="right"&&(k=p.startAngle+p.ticksAngle-(M-p.minValue)/(p.maxValue-p.minValue)*p.ticksAngle);var V=te(g,p),q=$i(V/100*p.needleCircleSize),K=$i(V/100*p.needleCircleSize*.75),Y=$i(V/100*p.needleEnd),X=$i(p.needleStart?V/100*p.needleStart:0),fe=V/100*p.needleWidth,ve=V/100*p.needleWidth/2,Ee=qi.pixelRatio;g.save(),ke.drawNeedleShadow(g,p),g.rotate(ke.radians(k)),g.fillStyle=ke.linearGradient(g,p.colorNeedle,p.colorNeedleEnd,Y-X),p.needleType==="arrow"?(g.beginPath(),g.moveTo(-ve,-X),g.lineTo(-fe,0),g.lineTo(-1*Ee,Y),g.lineTo(Ee,Y),g.lineTo(fe,0),g.lineTo(ve,-X),g.closePath(),g.fill(),g.beginPath(),g.lineTo(-.5*Ee,Y),g.lineTo(-1*Ee,Y),g.lineTo(-fe,0),g.lineTo(-ve,-X),g.lineTo(ve/2*Ee-2*Ee,-X),g.closePath(),g.fillStyle=p.colorNeedleShadowUp,g.fill()):(g.beginPath(),g.moveTo(-ve,Y),g.lineTo(-ve,X),g.lineTo(ve,X),g.lineTo(ve,Y),g.closePath(),g.fill()),g.restore(),p.needleCircleSize&&(g.save(),ke.drawNeedleShadow(g,p),p.needleCircleOuter&&(g.beginPath(),g.arc(0,0,q,0,2*Ko,!0),g.fillStyle=ke.linearGradient(g,p.colorNeedleCircleOuter,p.colorNeedleCircleOuterEnd,q),g.fill(),g.closePath()),p.needleCircleInner&&(g.beginPath(),g.arc(0,0,K,0,2*Ko,!0),g.fillStyle=ke.linearGradient(g,p.colorNeedleCircleInner,p.colorNeedleCircleInnerEnd,K),g.fill(),g.closePath()),g.restore())}}function Sn(g,p,b){ke.drawValueBox(g,p,b,0,g.max-.33*g.max,g.max)}function Un(g){var p=g.startAngle,b=g.startAngle+g.ticksAngle,M=p,k=p+(ke.normalizedValue(g).normal-g.minValue)/(g.maxValue-g.minValue)*g.ticksAngle;if(g.barStartPosition==="middle"){var V=.5*(g.minValue+g.maxValue);g.value<V?(M=180-(V-ke.normalizedValue(g).normal)/(g.maxValue-g.minValue)*g.ticksAngle,k=180):(M=180,k=180+(ke.normalizedValue(g).normal-V)/(g.maxValue-g.minValue)*g.ticksAngle)}else g.barStartPosition==="right"&&(M=b-k+p,k=b);return{startAngle:M,endAngle:k}}function wn(g,p){var b=g.max/100,M=te(g,p)-5*b,k=parseFloat(p.barStrokeWidth+"")||0,V=(parseFloat(p.barWidth+"")||0)*b,q=M-2*k-V,K=(M-q)/2,Y=q+K,X=k/Y,fe=p.startAngle,ve=p.startAngle+p.ticksAngle;if(g.save(),g.rotate(Wl),k&&(g.beginPath(),g.arc(0,0,Y,ke.radians(fe)-X,ke.radians(ve)+X,!1),g.strokeStyle=p.colorBarStroke,g.lineWidth=2*K,g.stroke(),g.closePath()),V&&(g.beginPath(),g.arc(0,0,Y,ke.radians(fe),ke.radians(ve),!1),g.strokeStyle=p.colorBar,g.lineWidth=V,g.stroke(),g.closePath(),p.barShadow&&(g.save(),g.beginPath(),g.arc(0,0,M,ke.radians(fe),ke.radians(ve),!1),g.clip(),g.beginPath(),g.strokeStyle=p.colorBar,g.lineWidth=1,g.shadowBlur=p.barShadow,g.shadowColor=p.colorBarShadow,g.shadowOffsetX=0,g.shadowOffsetY=0,g.arc(0,0,M,ke.radians(p.startAngle),ke.radians(p.startAngle+p.ticksAngle),!1),g.stroke(),g.closePath(),g.restore()),p.barProgress)){var Ee=Un(p),Pe=Ee.startAngle,Ve=Ee.endAngle;g.beginPath(),g.arc(0,0,Y,ke.radians(Pe),ke.radians(Ve),!1),g.strokeStyle=p.colorBarProgress,g.lineWidth=V,g.stroke(),g.closePath()}g.restore()}function Za(g){return g.options.animatedValue?g.options.value:g.value}function zo(g,p,b,M,k,V,q,K){g.beginPath(),g.fillStyle=K?ke.linearGradient(g,q,K,k>V?k:V,V>k,k>V?b:M):q,p>0?ke.roundRect(g,b,M,k,V,p):g.rect(b,M,k,V),g.fill(),g.closePath()}function Hi(g,p,b,M,k,V,q,K,Y){g.beginPath(),g.lineWidth=p,g.strokeStyle=Y?ke.linearGradient(g,K,Y,q,!0,k):K,b>0?ke.roundRect(g,M,k,V,q,b):g.rect(M,k,V,q),g.stroke(),g.closePath()}function Uo(g,p,b,M,k,V){function q(Ke,lt,wt,ui){return Ke&&(!ui&&p.borderShadowWidth&&(g.save(),g.shadowBlur=p.borderShadowWidth,g.shadowColor=p.colorBorderShadow),Hi(g,Ke*K,Y,b+Ke*K/2-Ne,M+Ke*K/2-Ne,X,Pe,lt,wt),Ne+=.5*K,!ui&&p.borderShadowWidth&&(ui=!0,g.restore())),ui}var K=qi.pixelRatio,Y=p.borderRadius*K,X=k-p.borderShadowWidth-p.borderOuterWidth*K,fe=X-p.borderOuterWidth*K-p.borderMiddleWidth*K,ve=fe-p.borderMiddleWidth*K-p.borderInnerWidth*K,Ee=ve-p.borderInnerWidth*K,Pe=V-p.borderShadowWidth-p.borderOuterWidth*K,Ve=Pe-p.borderOuterWidth*K-p.borderMiddleWidth*K,it=Ve-p.borderMiddleWidth*K-p.borderInnerWidth*K,Oe=it-p.borderInnerWidth*K,Ze=b-(fe-X)/2,Qe=Ze-(ve-fe)/2,at=Qe-(Ee-ve)/2,$e=M-(Ve-Pe)/2,Ye=$e-(it-Ve)/2,ze=Ye-(Oe-it)/2,Ne=0,Fe=!1;return g.save(),Fe=q(p.borderOuterWidth,p.colorBorderOuter,p.colorBorderOuterEnd,Fe),Fe=q(p.borderMiddleWidth,p.colorBorderMiddle,p.colorBorderMiddleEnd,Fe),Fe=q(p.borderInnerWidth,p.colorBorderInner,p.colorBorderInnerEnd,Fe),!Fe&&p.borderShadowWidth&&(g.shadowBlur=p.borderShadowWidth,g.shadowColor=p.colorBorderShadow),zo(g,Y,at,ze,Ee+2*Ne,Oe+2*Ne,p.colorPlate,p.colorPlateEnd),g.restore(),[at,ze,Ee,Oe]}function Ho(g,p,b,M,k,V){var q=qi.pixelRatio,K=V>=k,Y=K?.85*k:V,X=K?V:k;b=K?Ge(b+(k-Y)/2):b;var fe=!!p.title,ve=!!p.units,Ee=!!p.valueBox,Pe=void 0,Ve=void 0,it=void 0;K?(Ve=Ge(.05*X),Pe=Ge(.075*X),it=Ge(.11*X),fe&&(X-=Pe,M+=Pe),ve&&(X-=Ve),Ee&&(X-=it)):(Ve=Pe=Ge(.15*Y),fe&&(Y-=Pe,M+=Pe),ve&&(Y-=Ve));var Oe=2*p.barStrokeWidth,Ze=p.barBeginCircle?Ge(Y*p.barBeginCircle/200-Oe/2):0,Qe=Ge(Y*p.barWidth/100-Oe),at=Ge(X*p.barLength/100-Oe),$e=Ge((X-at)/2),Ye=Ge(b+(K?Y/2:$e+Ze)),ze=Ge(M+(K?X-$e-Ze+Oe/2:Y/2)),Ne=!K||p.hasLeft&&p.hasRight?0:(p.hasRight?-1:1)*p.ticksWidth/100*Y,Fe=K||p.hasLeft&&p.hasRight?0:(p.hasRight?-1:1)*p.ticksWidth/100*Y;return g.barDimensions={isVertical:K,width:Y,length:X,barWidth:Qe,barLength:at,strokeWidth:Oe,barMargin:$e,radius:Ze,pixelRatio:q,barOffset:null,titleMargin:fe?Pe:0,unitsMargin:ve?Ve:0,get ticksLength(){return this.barLength-this.barOffset-this.strokeWidth},X:b+Ne,Y:M+Fe,x0:Ye+Ne,y0:ze+Fe,baseX:b,baseY:M,ticksPadding:p.ticksPadding/100},g.barDimensions}function Qa(g,p,b,M,k,V,q){var K=Ho(g,p,M,k,V,q),Y=K.isVertical,X=K.width,fe=K.barWidth,ve=K.barLength,Ee=K.strokeWidth,Pe=K.barMargin,Ve=K.radius,it=K.x0,Oe=K.y0,Ze=K.X,Qe=K.Y,at=ve;g.save(),g.beginPath();var $e=null;if(p.barBeginCircle){var Ye=ke.radians(Y?270:0),ze=Math.asin(fe/2/Ve),Ne=Math.cos(ze),Fe=Math.sin(ze),Ke=it+(Y?Ve*Fe:Ve*Ne-Ee/2),lt=Y?Oe-Ve*Ne:Oe+Ve*Fe,wt=$i(Y?lt-Oe:Ke-it);$e=Ge(wt+Ve);var ui=Y?Ge(it-Ve*Fe):Ke,Si=Y?lt:Ge(Oe-Ve*Fe);b==="progress"&&(ve=$e+(ve-$e)*(ke.normalizedValue(p).normal-p.minValue)/(p.maxValue-p.minValue));var Xo=Ge(Ke+ve-$e+Ee/2),Ca=Ge(lt-ve+$e-Ee/2);g.arc(it,Oe,Ve,Ye+ze,Ye-ze),Y?(g.moveTo(Ke,Si),g.lineTo(Ke,Ca),g.lineTo(ui,Ca),g.lineTo(ui,Si)):(g.moveTo(Ke,Si),g.lineTo(Xo,Si),g.lineTo(Xo,lt),g.lineTo(Ke,lt))}else{var pc=Ge(Y?Ze+(X-fe)/2:Ze+Pe),gc=Ge(Y?Qe+ve+Pe:Qe+(X-fe)/2);b==="progress"&&(ve*=(p.value-p.minValue)/(p.maxValue-p.minValue)),Y?g.rect(pc,gc,fe,-ve):g.rect(pc,gc,ve,fe)}b!=="progress"&&p.barStrokeWidth&&(g.lineWidth=Ee,g.strokeStyle=p.colorBarStroke,g.stroke()),b!=="progress"&&p.colorBar?(g.fillStyle=p.colorBarEnd?ke.linearGradient(g,p.colorBar,p.colorBarEnd,ve,Y,Y?Qe:Ze):p.colorBar,g.fill()):b==="progress"&&p.colorBarProgress&&(g.fillStyle=p.colorBarProgressEnd?ke.linearGradient(g,p.colorBarProgress,p.colorBarProgressEnd,at,Y,Y?Qe:Ze):p.colorBarProgress,g.fill()),g.closePath(),g.restore(),p.barBeginCircle&&(g.barDimensions.radius+=Ee),g.barDimensions.barOffset=$e,g.barDimensions.barWidth+=Ee,g.barDimensions.barLength+=Ee}function qo(g,p,b,M,k,V){Qa(g,p,"",b,M,k,V)}function $o(g,p){return p.needleSide!==g||p.tickSide!==g||p.numberSide!==g}function Nr(g,p,b,M,k,V){p.barProgress&&Qa(g,p,"progress",b,M,k,V)}function Xf(g,p){var b=g.barDimensions,M=b.isVertical,k=b.width,V=b.length,q=b.barWidth,K=b.barOffset,Y=b.barMargin,X=b.X,fe=b.Y,ve=b.ticksLength,Ee=b.ticksPadding,Pe=k*(parseFloat(p.highlightsWidth)||0)/100;if(p.highlights&&Pe){var Ve=p.tickSide!=="right",it=p.tickSide!=="left",Oe=0,Ze=p.highlights.length,Qe=(k-q)/2,at=p.maxValue-p.minValue,$e=Ge(M?X+Qe:X+Y+K),Ye=Pe,ze=M?fe+V-Y-K:fe+Qe,Ne=Ge((p.ticksWidth/100+Ee)*k)+(Pe-p.ticksWidth/100*k),Fe=Ge(q+Ee*k);for(g.save();Oe<Ze;Oe++){var Ke=p.highlights[Oe],lt=ve*$i(p.minValue-Ke.from)/at,wt=ve*$i((Ke.to-Ke.from)/at);g.beginPath(),g.fillStyle=Ke.color,M?(Ve&&g.rect($e-Ne,ze-lt,Ye,-wt),it&&g.rect($e+Fe,ze-lt,Ye,-wt)):(Ve&&g.rect($e+lt,ze-Ne,wt,Ye),it&&g.rect($e+lt,ze+Fe,wt,Ye)),g.fill(),g.closePath()}g.restore()}}function Or(g,p,b,M,k){g.beginPath(),g.moveTo(p,b),g.lineTo(M,k),g.stroke(),g.closePath()}function lc(g,p,b,M,k,V,q,K,Y){var X=g.barDimensions,fe=X.isVertical,ve=X.length,Ee=X.barWidth,Pe=X.barOffset,Ve=X.barMargin,it=X.pixelRatio,Oe=X.width,Ze=X.X,Qe=X.Y,at=X.ticksLength,$e=X.ticksPadding,Ye=(Oe-Ee)/2,ze=void 0,Ne=void 0,Fe=0,Ke=b.length,lt=void 0,wt=Y*Oe,ui=Ye-$e*Oe,Si=Ye+Ee+wt+$e*Oe,Xo=p instanceof Array?p:new Array(b.length).fill(p);g.save(),g.lineWidth=K*it;for(var Ca=at/(k-M);Fe<Ke;Fe++)lt=b[Fe],g.strokeStyle=Xo[Fe],fe?(Ne=Qe+ve-Ve-Pe+(M-lt)*Ca,V&&(ze=Ze+ui,Or(g,ze,Ne,Ge(ze-wt),Ne)),q&&(ze=Ze+Si,Or(g,ze,Ne,Ge(ze-wt),Ne))):(ze=Ze+Ve+Pe-(M-lt)*Ca,V&&(Ne=Qe+ui,Or(g,ze,Ne,ze,Ge(Ne-wt))),q&&(Ne=Qe+Si,Or(g,ze,Ge(Ne),ze,Ne-wt)));g.restore()}function Zf(g,p){var b=ke.prepareTicks(p),M=cc(b,2),k=M[0],V=M[1],q=2,K=(p.maxValue-p.minValue)/(p.majorTicks.length-1),Y=p.colorMajorTicks instanceof Array?p.colorMajorTicks:new Array(p.majorTicks.length).fill(p.colorStrokeTicks||p.colorMajorTicks);if(lc(g,Y,p.exactTicks?p.majorTicks:p.majorTicks.map(function(wt,ui){return p.minValue+K*ui}),p.minValue,p.maxValue,k,V,q,p.ticksWidth/100),p.strokeTicks){var X=g.barDimensions,fe=X.isVertical,ve=X.length,Ee=X.width,Pe=X.barWidth,Ve=X.barMargin,it=X.barOffset,Oe=X.X,Ze=X.Y,Qe=X.ticksLength,at=X.pixelRatio,$e=X.ticksPadding,Ye=(Ee-Pe)/2+Pe+$e*Ee,ze=(Ee-Pe)/2-$e*Ee,Ne=void 0,Fe=void 0,Ke=void 0,lt=void 0;g.strokeStyle=p.colorStrokeTicks||Y[0],q*=at,fe?(Fe=Ze+ve-Ve-it+q/2,lt=Fe-Qe-q,k&&(Ke=Ne=Ge(Oe+ze),Vr(g,Ne,Fe,Ke,lt)),V&&(Ke=Ne=Ge(Oe+Ye),Vr(g,Ne,Fe,Ke,lt))):(Ne=Oe+Ve+it-q/2,Ke=Ne+Qe+q,k&&(lt=Fe=Ge(Ze+ze),Vr(g,Ne,Fe,Ke,lt)),V&&(lt=Fe=Ge(Ze+Ye),Vr(g,Ne,Fe,Ke,lt)))}}function Vr(g,p,b,M,k){g.beginPath(),g.moveTo(p,b),g.lineTo(M,k),g.stroke(),g.closePath()}function Qf(g,p){var b=ke.prepareTicks(p),M=cc(b,2),k=M[0],V=M[1],q=[],K=p.minValue,Y=Math.abs(p.minorTicks)||0,X=Y?(p.maxValue-p.minValue)/(Y*(p.majorTicks.length-1)):0;if(Y)if(p.exactTicks)for(var fe=rn.mod(p.majorTicks[0],Y)||0;K<p.maxValue;K+=Y)fe+K<p.maxValue&&q.push(fe+K);else for(;K<p.maxValue;K+=X)q.push(K);lc(g,p.colorMinorTicks||p.colorStrokeTicks,q,p.minValue,p.maxValue,k,V,1,p.ticksWidthMinor/100)}function Jf(g,p){var b=g.barDimensions,M=b.isVertical,k=b.length,V=b.width,q=b.barWidth,K=b.barMargin,Y=b.barOffset,X=b.X,fe=b.Y,ve=b.ticksLength,Ee=b.ticksPadding,Pe=p.maxValue-p.minValue,Ve=Pe/(p.majorTicks.length-1),it=p.exactTicks?p.majorTicks:p.majorTicks.map(function(Xo,Ca){return p.minValue+Ve*Ca}),Oe=it.length,Ze=p.numberSide!=="right",Qe=p.numberSide!=="left",at=p.fontNumbersSize*V/200,$e=0,Ye=(p.ticksWidth/100+2*Ee)*V,ze=(V-q)/2-Ye,Ne=(V-q)/2+q+Ye,Fe=void 0,Ke=void 0,lt=void 0,wt=void 0,ui=p.colorNumbers instanceof Array?p.colorNumbers:new Array(Oe).fill(p.colorNumbers),Si=p.numbersMargin/100*V;for(g.font=ke.font(p,"Numbers",V/200),g.lineWidth=0,g.textAlign="center";$e<Oe;$e++)g.fillStyle=ui[$e],wt=p.majorTicks[$e],lt=p.exactTicks?ve*((it[$e]-p.minValue)/Pe):$e*ve/(Oe-1),M?(Ke=fe+k-K-Y-lt+at/3,Ze&&(g.textAlign="right",g.fillText(wt,X+ze-Si,Ke)),Qe&&(g.textAlign="left",g.fillText(wt,X+Ne+Si,Ke))):(g.measureText(wt).width,Fe=X+K+Y+lt,Ze&&g.fillText(wt,Fe,fe+ze-Si),Qe&&g.fillText(wt,Fe,fe+Ne+at+Si))}function e0(g,p){if(p.title){var b=g.barDimensions,M=b.isVertical,k=b.width,V=b.length,q=b.baseX,K=b.baseY,Y=b.titleMargin,X=p.fontTitleSize*k/200,fe=Ge(q+(M?k:V)/2),ve=Ge(K+Y/2-(M?X:X/2)-.025*(M?V:k));g.save(),g.textAlign="center",g.fillStyle=p.colorTitle,g.font=ke.font(p,"Title",k/200),g.lineWidth=0,g.fillText(p.title,fe,ve,M?k:V),g.restore()}}function t0(g,p){if(p.units){var b=g.barDimensions,M=b.isVertical,k=b.width,V=b.length,q=b.baseX,K=b.baseY,Y=b.unitsMargin,X=p.fontUnitsSize*k/200,fe=Ge(q+(M?k:V)/2),ve=Ge(K+(M?V:k)+Y/2-X/2);g.save(),g.textAlign="center",g.fillStyle=p.colorUnits,g.font=ke.font(p,"Units",k/200),g.lineWidth=0,g.fillText(ke.formatContext(p,p.units),fe,ve,M?k:V),g.restore()}}function i0(g,p){if(p.needle){var b=g.barDimensions,M=b.isVertical,k=b.width,V=b.length,q=b.barWidth,K=b.barOffset,Y=b.barMargin,X=b.ticksLength,fe=b.X,ve=b.Y,Ee=b.ticksPadding,Pe=p.needleSide!=="right",Ve=p.needleSide!=="left",it=X*(ke.normalizedValue(p).indented-p.minValue)/(p.maxValue-p.minValue),Oe=(p.ticksWidth/100+Ee)*k,Ze=q/2+Oe,Qe=Ze*(p.needleEnd/100),at=void 0,$e=void 0,Ye=void 0,ze=void 0,Ne=p.needleType.toLowerCase()==="arrow"?a0:n0,Fe=(k-q)/2,Ke=Ze*(p.needleStart/100),lt=Fe-Oe-Ke,wt=Fe+q+Oe+Ke;g.save(),ke.drawNeedleShadow(g,p),M?(Ye=Ge(ve+V-Y-K-it),Pe&&(at=Ge(fe+lt),$e=at+Qe,Ne(g,p,at,Ye,$e,Ye,Qe)),Ve&&(at=Ge(fe+wt),$e=at-Qe,Ne(g,p,at,Ye,$e,Ye,Qe,!0))):(at=Ge(fe+Y+K+it),Pe&&(Ye=Ge(ve+lt),ze=Ye+Qe,Ne(g,p,at,Ye,at,ze,Qe)),Ve&&(Ye=Ge(ve+wt),ze=Ye-Qe,Ne(g,p,at,Ye,at,ze,Qe,!0))),g.restore()}}function dc(g,p,b,M){return p.colorNeedleEnd?ke.linearGradient(g,M?p.colorNeedleEnd:p.colorNeedle,M?p.colorNeedle:p.colorNeedleEnd,b,!g.barDimensions.isVertical):p.colorNeedle}function n0(g,p,b,M,k,V,q,K){g.lineWidth=p.needleWidth,g.strokeStyle=dc(g,p,q,K),g.beginPath(),g.moveTo(b,M),g.lineTo(k,V),g.stroke(),g.closePath()}function a0(g,p,b,M,k,V,q,K){var Y=Ge(.4*q),X=q-Y,fe=b===k,ve=p.needleWidth/2;g.fillStyle=dc(g,p,q,K),g.beginPath(),fe?(M>V&&(X*=-1),g.moveTo(b-ve,M),g.lineTo(b+ve,M),g.lineTo(b+ve,M+X),g.lineTo(b,V),g.lineTo(b-ve,M+X),g.lineTo(b-ve,M)):(b>k&&(X*=-1),g.moveTo(b,M-ve),g.lineTo(b,M+ve),g.lineTo(b+X,M+ve),g.lineTo(k,M),g.lineTo(b+X,M-ve),g.lineTo(b,M-ve)),g.fill(),g.closePath()}function o0(g,p,b,M,k,V,q){var K=(parseFloat(p.fontValueSize)||0)*V/200,Y=(.11*q-K)/2;g.barDimensions.isVertical&&ke.drawValueBox(g,p,b,M+V/2,k+q-K-Y,V)}var cc=(function(){function g(p,b){var M=[],k=!0,V=!1,q=void 0;try{for(var K,Y=p[Symbol.iterator]();!(k=(K=Y.next()).done)&&(M.push(K.value),!b||M.length!==b);k=!0);}catch(X){V=!0,q=X}finally{try{!k&&Y.return&&Y.return()}finally{if(V)throw q}}return M}return function(p,b){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return g(p,b);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),Nl=function g(p,b,M){p===null&&(p=Function.prototype);var k=Object.getOwnPropertyDescriptor(p,b);if(k===void 0){var V=Object.getPrototypeOf(p);return V===null?void 0:g(V,b,M)}if("value"in k)return k.value;var q=k.get;if(q!==void 0)return q.call(M)},r0=function g(p,b,M,k){var V=Object.getOwnPropertyDescriptor(p,b);if(V===void 0){var q=Object.getPrototypeOf(p);q!==null&&g(q,b,M,k)}else if("value"in V&&V.writable)V.value=M;else{var K=V.set;K!==void 0&&K.call(k,M)}return M},Aa=(function(){function g(p,b){for(var M=0;M<b.length;M++){var k=b[M];k.enumerable=k.enumerable||!1,k.configurable=!0,"value"in k&&(k.writable=!0),Object.defineProperty(p,k.key,k)}}return function(p,b,M){return b&&g(p.prototype,b),M&&g(p,M),p}})(),Lr=null,s0=(function(){function g(){i(this,g),this._events={},this.addListener=this.on,this.removeListener=this.off}return Aa(g,[{key:"emit",value:function(p){if(this._events[p]){for(var b=0,M=this._events[p].length,k=arguments.length,V=Array(k>1?k-1:0),q=1;q<k;q++)V[q-1]=arguments[q];for(;b<M;b++)this._events[p][b]&&this._events[p][b].apply(this,V)}}},{key:"once",value:function(p){for(var b=arguments.length,M=Array(b>1?b-1:0),k=1;k<b;k++)M[k-1]=arguments[k];for(var V=0,q=M.length,K=this;V<q;V++)(function(){var Y=M[V],X=function fe(){K.off(p,fe),Y.apply(K,arguments)};M[V]=X})();this.on.apply(this,[p].concat(M))}},{key:"on",value:function(p){this._events[p]||(this._events[p]=[]);for(var b=0,M=arguments.length<=1?0:arguments.length-1;b<M;b++)this._events[p].push(arguments.length<=b+1?void 0:arguments[b+1])}},{key:"off",value:function(p){if(this._events[p])for(var b=0,M=arguments.length<=1?0:arguments.length-1;b<M;b++)for(var k=arguments.length<=b+1?void 0:arguments[b+1],V=void 0;~(V=this._events[p].indexOf(k));)this._events[p].splice(V,1)}},{key:"removeAllListeners",value:function(p){delete this._events[p]}},{key:"listeners",get:function(){return this._events}}]),g})(),uc=o("requestAnimationFrame")||function(g){return setTimeout(function(){return g(new Date().getTime())},1e3/60)},jo={linear:function(g){return g},quad:function(g){return Math.pow(g,2)},dequad:function(g){return 1-jo.quad(1-g)},quint:function(g){return Math.pow(g,5)},dequint:function(g){return 1-Math.pow(1-g,5)},cycle:function(g){return 1-Math.sin(Math.acos(g))},decycle:function(g){return Math.sin(Math.acos(1-g))},bounce:function(g){return 1-jo.debounce(1-g)},debounce:function(g){for(var p=0,b=1;;p+=b,b/=2)if(g>=(7-4*p)/11)return-Math.pow((11-6*p-11*g)/4,2)+Math.pow(b,2)},elastic:function(g){return 1-jo.delastic(1-g)},delastic:function(g){return Math.pow(2,10*(g-1))*Math.cos(20*Math.PI*1.5/3*g)}},Ol=(function(){function g(){var p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"linear",b=arguments.length>1&&arguments[1]!==void 0?arguments[1]:250,M=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},k=arguments.length>3&&arguments[3]!==void 0?arguments[3]:function(){};if(i(this,g),this.duration=b,this.rule=p,this.draw=M,this.end=k,typeof this.draw!="function")throw new TypeError("Invalid animation draw callback:",M);if(typeof this.end!="function")throw new TypeError("Invalid animation end callback:",k)}return Aa(g,[{key:"animate",value:function(p,b){var M=this;this.frame&&this.cancel();var k=window.performance&&window.performance.now?window.performance.now():o("animationStartTime")||Date.now();p=p||this.draw,b=b||this.end,this.draw=p,this.end=b,this.frame=uc(function(V){return r(V,p,k,jo[M.rule]||M.rule,M.duration,b,M)})}},{key:"cancel",value:function(){this.frame&&((o("cancelAnimationFrame")||function(p){})(this.frame),this.frame=null)}},{key:"destroy",value:function(){this.cancel(),this.draw=null,this.end=null}}]),g})();Ol.rules=jo;var Ja=(function(){function g(p,b,M){i(this,g),this.options=p,this.element=b.toLowerCase(),this.type=g.toDashed(M),this.Type=n[M],this.mutationsObserved=!1,this.isObservable=!!window.MutationObserver,window.GAUGES_NO_AUTO_INIT||g.domReady(this.traverse.bind(this))}return Aa(g,[{key:"isValidNode",value:function(p){return!(!p.tagName||p.tagName.toLowerCase()!==this.element||p.getAttribute("data-type")!==this.type)}},{key:"traverse",value:function(){for(var p=document.getElementsByTagName(this.element),b=0,M=p.length;b<M;b++)this.process(p[b]);this.isObservable&&!this.mutationsObserved&&(new MutationObserver(this.observe.bind(this)).observe(document.body,{childList:!0,subtree:!0,attributes:!0,characterData:!0,attributeOldValue:!0,characterDataOldValue:!0}),this.mutationsObserved=!0)}},{key:"observe",value:function(p){for(var b=0,M=p.length;b<M;b++){var k=p[b];if(k.type==="attributes"&&k.attributeName==="data-type"&&this.isValidNode(k.target)&&k.oldValue!==this.type)setTimeout(this.process.bind(this,k.target));else if(k.addedNodes&&k.addedNodes.length)for(var V=0,q=k.addedNodes.length;V<q;V++)setTimeout(this.process.bind(this,k.addedNodes[V]))}}},{key:"process",value:function(p){var b=this;if(!this.isValidNode(p))return null;var M=void 0,k=JSON.parse(JSON.stringify(this.options)),V=null;for(M in k)if(k.hasOwnProperty(M)){var q=g.toAttributeName(M),K=g.parse(p.getAttribute(q));K!=null&&(k[M]=K)}return k.renderTo=p,V=new this.Type(k),V.draw&&V.draw(),this.isObservable&&(V.observer=new MutationObserver(function(Y){Y.forEach(function(X){if(X.type==="attributes"){var fe=X.attributeName.toLowerCase(),ve=p.getAttribute(fe).toLowerCase();if(fe==="data-type"&&ve&&ve!==b.type)V.observer.disconnect(),delete V.observer,V.destroy&&V.destroy();else if(fe.substr(0,5)==="data-"){var Ee=fe.substr(5).split("-").map(function(Ve,it){return it?Ve.charAt(0).toUpperCase()+Ve.substr(1):Ve}).join(""),Pe={};Pe[Ee]=g.parse(p.getAttribute(X.attributeName)),Ee==="value"?V&&(V.value=Pe[Ee]):V.update&&V.update(Pe)}}})}),V.observer.observe(p,{attributes:!0})),V}}],[{key:"parse",value:function(p){if(p==="true")return!0;if(p==="false")return!1;if(p!=="undefined"){if(p==="null")return null;if(/^[-+#.\w\d\s]+(?:,[-+#.\w\d\s]*)+$/.test(p))return p.split(",");try{return JSON.parse(p)}catch(b){}return p}}},{key:"toDashed",value:function(p){for(var b=p.split(/(?=[A-Z])/),M=1,k=b.length,V=b[0].toLowerCase();M<k;M++)V+="-"+b[M].toLowerCase();return V}},{key:"toCamelCase",value:function(p){for(var b=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],M=p.split(/-/),k=0,V=M.length,q="";k<V;k++)q+=k||b?M[k][0].toUpperCase()+M[k].substr(1).toLowerCase():M[k].toLowerCase();return q}},{key:"toAttributeName",value:function(p){return"data-"+g.toDashed(p)}},{key:"domReady",value:function(p){if(/comp|inter|loaded/.test((window.document||{}).readyState+""))return p();window.addEventListener?window.addEventListener("DOMContentLoaded",p,!1):window.attachEvent&&window.attachEvent("onload",p)}}]),g})(),qi=(function(){function g(p,b,M){i(this,g),g.collection.push(this),this.width=b||0,this.height=M||0,this.element=p,this.init()}return Aa(g,[{key:"init",value:function(){var p=g.pixelRatio;this.element.width=this.width*p,this.element.height=this.height*p,this.element.style.width=this.width+"px",this.element.style.height=this.height+"px",this.elementClone=this.element.cloneNode(!0),this.context=this.element.getContext("2d"),this.contextClone=this.elementClone.getContext("2d"),this.drawWidth=this.element.width,this.drawHeight=this.element.height,this.drawX=this.drawWidth/2,this.drawY=this.drawHeight/2,this.minSide=this.drawX<this.drawY?this.drawX:this.drawY,this.contextClone.translate(this.drawX,this.drawY),this.elementClone.initialized=!1,this.context.translate(this.drawX,this.drawY),this.context.max=this.contextClone.max=this.minSide,this.context.maxRadius=this.contextClone.maxRadius=null}},{key:"destroy",value:function(){var p=g.collection.indexOf(this);~p&&g.collection.splice(p,1),this.context.clearRect(-this.drawX,-this.drawY,this.drawWidth,this.drawHeight),this.context.max=null,delete this.context.max,this.context.maxRadius=null,delete this.context.maxRadius,this.context=null,this.contextClone=null,this.elementClone=null,this.element=null,this.onRedraw=null}},{key:"commit",value:function(){var p=g.pixelRatio;return p!==1&&this.contextClone.scale(p,p),this}},{key:"redraw",value:function(){return this.init(),this.onRedraw&&this.onRedraw(),this}}],[{key:"redraw",value:function(){for(var p=0,b=g.collection.length;p<b;p++)g.collection[p].redraw()}},{key:"pixelRatio",get:function(){return window.devicePixelRatio||1}}]),g})();qi.collection=[],window.matchMedia&&window.matchMedia("screen and (min-resolution: 2dppx)").addListener(qi.redraw);var Vl={renderTo:null,width:0,height:0,minValue:0,maxValue:100,value:0,units:!1,exactTicks:!1,majorTicks:[0,20,40,60,80,100],minorTicks:10,strokeTicks:!0,animatedValue:!1,animateOnInit:!1,title:!1,borders:!0,numbersMargin:1,listeners:null,valueInt:3,valueDec:2,majorTicksInt:1,majorTicksDec:0,animation:!0,animationDuration:500,animationRule:"cycle",colorPlate:"#fff",colorPlateEnd:"",colorMajorTicks:"#444",colorMinorTicks:"#666",colorStrokeTicks:"",colorTitle:"#888",colorUnits:"#888",colorNumbers:"#444",colorNeedle:"rgba(240,128,128,1)",colorNeedleEnd:"rgba(255,160,122,.9)",colorValueText:"#444",colorValueTextShadow:"rgba(0,0,0,0.3)",colorBorderShadow:"rgba(0,0,0,0.5)",colorBorderOuter:"#ddd",colorBorderOuterEnd:"#aaa",colorBorderMiddle:"#eee",colorBorderMiddleEnd:"#f0f0f0",colorBorderInner:"#fafafa",colorBorderInnerEnd:"#ccc",colorValueBoxRect:"#888",colorValueBoxRectEnd:"#666",colorValueBoxBackground:"#babab2",colorValueBoxShadow:"rgba(0,0,0,1)",colorNeedleShadowUp:"rgba(2,255,255,0.2)",colorNeedleShadowDown:"rgba(188,143,143,0.45)",colorBarStroke:"#222",colorBar:"#ccc",colorBarProgress:"#888",colorBarShadow:"#000",fontNumbers:"Arial",fontTitle:"Arial",fontUnits:"Arial",fontValue:"Arial",fontNumbersSize:20,fontTitleSize:24,fontUnitsSize:22,fontValueSize:26,fontNumbersStyle:"normal",fontTitleStyle:"normal",fontUnitsStyle:"normal",fontValueStyle:"normal",fontNumbersWeight:"normal",fontTitleWeight:"normal",fontUnitsWeight:"normal",fontValueWeight:"normal",needle:!0,needleShadow:!0,needleType:"arrow",needleStart:5,needleEnd:85,needleWidth:4,borderOuterWidth:3,borderMiddleWidth:3,borderInnerWidth:3,borderShadowWidth:3,valueBox:!0,valueBoxStroke:5,valueBoxWidth:0,valueText:"",valueTextShadow:!0,valueBoxBorderRadius:2.5,highlights:[{from:20,to:60,color:"#eee"},{from:60,to:80,color:"#ccc"},{from:80,to:100,color:"#999"}],highlightsWidth:15,highlightsLineCap:"butt",barWidth:20,barStrokeWidth:0,barProgress:!0,barShadow:0};s.prototype=Object.create(Array.prototype),s.prototype.constructor=s,s.prototype.get=function(g){if(typeof g=="string")for(var p=0,b=this.length;p<b;p++){var M=this[p].options.renderTo.tagName?this[p].options.renderTo:document.getElementById(this[p].options.renderTo||"");if(M.getAttribute("id")===g)return this[p]}else if(typeof g=="number")return this[g];return null};var Ll="2.2.1",Ge=Math.round,$i=Math.abs,Yo=new s;Yo.version=Ll;var rn=(function(g){function p(b){i(this,p);var M=e(this,(p.__proto__||Object.getPrototypeOf(p)).call(this)),k=M.constructor.name;if(k==="BaseGauge")throw new TypeError("Attempt to instantiate abstract class!");if(Yo.push(M),b.listeners&&Object.keys(b.listeners).forEach(function(q){(b.listeners[q]instanceof Array?b.listeners[q]:[b.listeners[q]]).forEach(function(K){M.on(q,K)})}),M.version=Ll,M.type=n[k]||p,M.initialized=!1,b.minValue=parseFloat(b.minValue),b.maxValue=parseFloat(b.maxValue),b.value=parseFloat(b.value)||0,b.borders||(b.borderInnerWidth=b.borderMiddleWidth=b.borderOuterWidth=0),!b.renderTo)throw TypeError("Canvas element was not specified when creating the Gauge object!");var V=b.renderTo.tagName?b.renderTo:document.getElementById(b.renderTo);if(!(V instanceof HTMLCanvasElement))throw TypeError("Given gauge canvas element is invalid!");return b.width=parseFloat(b.width)||0,b.height=parseFloat(b.height)||0,b.width&&b.height||(b.width||(b.width=V.parentNode?V.parentNode.offsetWidth:V.offsetWidth),b.height||(b.height=V.parentNode?V.parentNode.offsetHeight:V.offsetHeight)),M.options=b||{},M.options.animateOnInit&&(M._value=M.options.value,M.options.value=M.options.minValue),M.canvas=new qi(V,b.width,b.height),M.canvas.onRedraw=M.draw.bind(M),M.animation=new Ol(b.animationRule,b.animationDuration),M}return t(p,g),Aa(p,[{key:"update",value:function(b){return Object.assign(this.options,this.type.configure(b||{})),this.canvas.width=this.options.width,this.canvas.height=this.options.height,this.animation.rule=this.options.animationRule,this.animation.duration=this.options.animationDuration,this.canvas.redraw(),this}},{key:"destroy",value:function(){var b=Yo.indexOf(this);~b&&Yo.splice(b,1),this.canvas.destroy(),this.canvas=null,this.animation.destroy(),this.animation=null,this.emit("destroy")}},{key:"draw",value:function(){return this.options.animateOnInit&&!this.initialized&&(this.value=this._value,this.initialized=!0,this.emit("init")),this.emit("render"),this}},{key:"value",set:function(b){var M=this;b=p.ensureValue(b,this.options.minValue);var k=this.options.value;if(b!==k)if(this.options.animation){if(this.animation.frame&&(this.options.value=this._value,this._value===b))return this.animation.cancel(),void delete this._value;this._value===void 0&&(this._value=b),this.emit("animationStart"),this.animation.animate(function(V){var q=k+(b-k)*V;M.options.animatedValue&&M.emit("value",q,M.value),M.options.value=q,M.draw(),M.emit("animate",V,M.options.value)},function(){M._value!==void 0&&(M.emit("value",M._value,M.value),M.options.value=M._value,delete M._value),M.draw(),M.emit("animationEnd"),M.animation.frame=null})}else this.emit("value",b,this.value),this.options.value=b,this.draw()},get:function(){return this._value===void 0?this.options.value:this._value}}],[{key:"configure",value:function(b){return b}},{key:"initialize",value:function(b,M){return new Ja(M,"canvas",b)}},{key:"fromElement",value:function(b){var M=Ja.toCamelCase(b.getAttribute("data-type")),k=b.attributes,V=0,q=k.length,K={};if(M){for(/Gauge$/.test(M)||(M+="Gauge");V<q;V++)K[Ja.toCamelCase(k[V].name.replace(/^data-/,""),!1)]=Ja.parse(k[V].value);new Ja(K,b.tagName,M).process(b)}}},{key:"ensureValue",value:function(b){var M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return b=parseFloat(b),!isNaN(b)&&isFinite(b)||(b=parseFloat(M)||0),b}},{key:"mod",value:function(b,M){return(b%M+M)%M}},{key:"version",get:function(){return Ll}}]),p})(s0);n!==void 0&&(n.BaseGauge=rn,n.gauges=(window.document||{}).gauges=Yo);var l0=/{([_a-zA-Z]+[_a-zA-Z0-9]*)}/g,ke={roundRect:v,padValue:y,formatMajorTickNumber:C,radians:S,radialPoint:_,linearGradient:F,drawNeedleShadow:E,drawValueBox:B,verifyError:l,prepareTicks:h,font:N,normalizedValue:re,formatContext:m},Ko=Math.PI,Wl=Ko/2,mc=Object.assign({},Vl,{ticksAngle:270,startAngle:45,colorNeedleCircleOuter:"#f0f0f0",colorNeedleCircleOuterEnd:"#ccc",colorNeedleCircleInner:"#e8e8e8",colorNeedleCircleInnerEnd:"#f5f5f5",needleCircleSize:10,needleCircleInner:!0,needleCircleOuter:!0,needleStart:20,animationTarget:"needle",useMinPath:!1,barWidth:0,barStartPosition:"left"}),d0=(function(g){function p(b){return i(this,p),b=Object.assign({},mc,b||{}),e(this,(p.__proto__||Object.getPrototypeOf(p)).call(this,p.configure(b)))}return t(p,g),Aa(p,[{key:"draw",value:function(){try{var b=this.canvas,M=[-b.drawX,-b.drawY,b.drawWidth,b.drawHeight],k=M[0],V=M[1],q=M[2],K=M[3],Y=this.options;if(Y.animationTarget==="needle"){if(!b.elementClone.initialized){var X=b.contextClone;X.clearRect(k,V,q,K),this.emit("beforePlate"),se(X,Y),this.emit("beforeHighlights"),de(X,Y),this.emit("beforeMinorTicks"),ce(X,Y),this.emit("beforeMajorTicks"),me(X,Y),this.emit("beforeNumbers"),pt(X,Y),this.emit("beforeTitle"),tt(X,Y),this.emit("beforeUnits"),Bt(X,Y),b.elementClone.initialized=!0}this.canvas.commit(),b.context.clearRect(k,V,q,K),b.context.drawImage(b.elementClone,k,V,q,K),this.emit("beforeProgressBar"),wn(b.context,Y),this.emit("beforeValueBox"),Sn(b.context,Y,Za(this)),this.emit("beforeNeedle"),ri(b.context,Y)}else{var fe=-ke.radians((Y.value-Y.minValue)/(Y.maxValue-Y.minValue)*Y.ticksAngle);if(b.context.clearRect(k,V,q,K),this.emit("beforePlate"),se(b.context,Y),b.context.rotate(fe),this.emit("beforeHighlights"),de(b.context,Y),this.emit("beforeMinorTicks"),ce(b.context,Y),this.emit("beforeMajorTicks"),me(b.context,Y),this.emit("beforeNumbers"),pt(b.context,Y),this.emit("beforeProgressBar"),wn(b.context,Y),b.context.rotate(-fe),!b.elementClone.initialized){var ve=b.contextClone;ve.clearRect(k,V,q,K),this.emit("beforeTitle"),tt(ve,Y),this.emit("beforeUnits"),Bt(ve,Y),this.emit("beforeNeedle"),ri(ve,Y),b.elementClone.initialized=!0}b.context.drawImage(b.elementClone,k,V,q,K)}this.emit("beforeValueBox"),Sn(b.context,Y,Za(this)),Nl(p.prototype.__proto__||Object.getPrototypeOf(p.prototype),"draw",this).call(this)}catch(Ee){ke.verifyError(Ee)}return this}},{key:"value",set:function(b){b=rn.ensureValue(b,this.options.minValue),this.options.animation&&this.options.ticksAngle===360&&this.options.useMinPath&&(this._value=b,b=this.options.value+((b-this.options.value)%360+540)%360-180),r0(p.prototype.__proto__||Object.getPrototypeOf(p.prototype),"value",b,this)},get:function(){return Nl(p.prototype.__proto__||Object.getPrototypeOf(p.prototype),"value",this)}}],[{key:"configure",value:function(b){return b.barWidth>50&&(b.barWidth=50),isNaN(b.startAngle)&&(b.startAngle=45),isNaN(b.ticksAngle)&&(b.ticksAngle=270),b.ticksAngle>360&&(b.ticksAngle=360),b.ticksAngle<0&&(b.ticksAngle=0),b.startAngle<0&&(b.startAngle=0),b.startAngle>360&&(b.startAngle=360),b}}]),p})(rn);n!==void 0&&(n.RadialGauge=d0),rn.initialize("RadialGauge",mc);var hc=Object.assign({},Vl,{borderRadius:0,barBeginCircle:30,colorBarEnd:"",colorBarProgressEnd:"",needleWidth:6,tickSide:"both",needleSide:"both",numberSide:"both",ticksWidth:10,ticksWidthMinor:5,ticksPadding:5,barLength:85,fontTitleSize:26,highlightsWidth:10}),c0=(function(g){function p(b){return i(this,p),b=Object.assign({},hc,b||{}),e(this,(p.__proto__||Object.getPrototypeOf(p)).call(this,p.configure(b)))}return t(p,g),Aa(p,[{key:"draw",value:function(){try{var b=this.canvas,M=[-b.drawX,-b.drawY,b.drawWidth,b.drawHeight],k=M[0],V=M[1],q=M[2],K=M[3],Y=this.options;if(!b.elementClone.initialized){var X=b.contextClone;X.clearRect(k,V,q,K),this.emit("beforePlate"),this.drawBox=Uo(X,Y,k,V,q,K),this.emit("beforeBar"),qo.apply(void 0,[X,Y].concat(a(this.drawBox))),b.contextClone.barDimensions=X.barDimensions,this.emit("beforeHighlights"),Xf(X,Y),this.emit("beforeMinorTicks"),Qf(X,Y),this.emit("beforeMajorTicks"),Zf(X,Y),this.emit("beforeNumbers"),Jf(X,Y),this.emit("beforeTitle"),e0(X,Y),this.emit("beforeUnits"),t0(X,Y),b.elementClone.initialized=!0}this.canvas.commit(),b.context.clearRect(k,V,q,K),b.context.drawImage(b.elementClone,k,V,q,K),this.emit("beforeProgressBar"),Nr.apply(void 0,[b.context,Y].concat(a(this.drawBox))),this.emit("beforeNeedle"),i0(b.context,Y),this.emit("beforeValueBox"),o0.apply(void 0,[b.context,Y,Y.animatedValue?this.options.value:this.value].concat(a(this.drawBox))),Nl(p.prototype.__proto__||Object.getPrototypeOf(p.prototype),"draw",this).call(this)}catch(fe){ke.verifyError(fe)}return this}}],[{key:"configure",value:function(b){return b.barStrokeWidth>=b.barWidth&&(b.barStrokeWidth=Ge(b.barWidth/2)),b.hasLeft=$o("right",b),b.hasRight=$o("left",b),b.value>b.maxValue&&(b.value=b.maxValue),b.value<b.minValue&&(b.value=b.minValue),rn.configure(b)}}]),p})(rn);n!==void 0&&(n.LinearGauge=c0),rn.initialize("LinearGauge",hc),typeof gl<"u"&&Object.assign(n,{Collection:s,GenericOptions:Vl,Animation:Ol,BaseGauge:rn,drawings:ke,SmartCanvas:qi,DomObserver:Ja,vendorize:o})})(typeof gl<"u"?gl.exports:window)});var nm=[{id:null,name:"Dashboard 1",icon:"dashboard-dashboard",configuration:[{w:24,h:24,id:"d1d58e6f-f8b4-4a72-9597-7f92aa6776fc",selector:"widget-host2",input:{widgetProperties:{type:"widget-tutorial",uuid:"d1d58e6f-f8b4-4a72-9597-7f92aa6776fc"}},x:0,y:0}],collapseSplitShell:!1}];var Tt=(()=>{class n{_settings=A(Ht);_router=A(Cu);_destroyRef=A(Ie);dashboards=w([],{equal:Ei});activeDashboard=w(null);_widgetAction=new sn(null);widgetAction$=this._widgetAction.asObservable();isDashboardStatic=w(!0);widgetClipboard=w(null);layoutEditSaved=w(0);layoutEditCanceled=w(0);constructor(){let e=this._settings.getDashboardConfig();if(!e||e.length===0){console.warn("[Dashboard Service] No dashboards found in settings, creating blank dashboard");let i=nm.map(o=>ge(Z({},o),{id:Di.create()}));this.dashboards.set([...i])}else this.dashboards.set(e);this.applyDashboardParam(this.getRouteParam("id"),!1);let t=this._router.events.pipe(_i(i=>i instanceof Au),zr({bufferSize:1,refCount:!0}),De(this._destroyRef));t.pipe(mi(1),si(()=>this.getRouteParam("id"))).subscribe(i=>this.applyDashboardParam(i,!0)),t.pipe(Ur(1),si(()=>this.getRouteParam("id")),Br()).subscribe(i=>this.applyDashboardParam(i,!1)),W(()=>{let i=this.dashboards();z(()=>{this._settings.saveDashboards(i)})})}getRouteParam(e){let t=this._router.routerState.snapshot.root;for(;t;){if(t.paramMap.has(e))return t.paramMap.get(e);t=t.firstChild??null}return null}applyDashboardParam(e,t){if(e===null||e===""){t&&this.setActiveDashboardIndex(0);return}let i=Number(e);if(Number.isNaN(i)){t&&this.setActiveDashboardIndex(0);return}this.setActiveDashboardIndex(i)}setActiveDashboardIndex(e){e!==this.activeDashboard()&&(e>=0&&e<this.dashboards().length?this.activeDashboard.set(e):console.error(`[Dashboard Service] Invalid dashboard ID: ${e}`))}toggleStaticDashboard(){this.isDashboardStatic.set(!this.isDashboardStatic())}add(e,t,i,o){let r=0;return this.dashboards.update(s=>{let l=[...s,{id:Di.create(),name:e,icon:i??"dashboard-dashboard",configuration:t,collapseSplitShell:o??!1}];return r=l.length-1,l}),r}update(e,t,i,o){this.dashboards.update(r=>r.map((s,l)=>l===e?ge(Z({},s),{name:t,icon:i??"dashboard-dashboard",collapseSplitShell:o??!1}):s))}delete(e){this.dashboards.update(t=>t.filter((i,o)=>o!==e)),this.dashboards().length===0?(this.add("Dashboard "+(this.dashboards().length+1),[]),this.activeDashboard.set(0)):this.activeDashboard()>this.dashboards().length-1&&this.activeDashboard.set(this.dashboards().length-1)}duplicate(e,t,i,o){if(e<0||e>=this.dashboards().length)return console.error(`[Dashboard Service] Invalid itemIndex: ${e}`),-1;let r=this.dashboards()[e],s=Yt(r);s.id=Di.create(),s.name=t,s.icon=i||"dashboard-dashboard",s.collapseSplitShell=o??!1,Array.isArray(s.configuration)?s.configuration.forEach(m=>{m&&m.input?.widgetProperties?(m.id=Di.create(),m.input.widgetProperties.uuid=m.id):console.error("Dashboard Service] Widget configuration is missing required properties:",m)}):(console.error("Dashboard Service] Dashboard configuration is not an array:",s.configuration),s.configuration=[]);let l=-1;return this.dashboards.update(m=>{let h=[...m,s];return l=h.length-1,h}),l}updateConfiguration(e,t){let i=Yt(t??[]);this.dashboards.update(o=>o.map((r,s)=>s===e?Ei(r.configuration,i)?r:ge(Z({},r),{configuration:i}):r))}previousDashboard(){this.activeDashboard()+1>this.dashboards().length-1?this.activeDashboard.set(0):this.activeDashboard.set(this.activeDashboard()+1)}nextDashboard(){this.activeDashboard()-1<0?this.activeDashboard.set(this.dashboards().length-1):this.activeDashboard.set(this.activeDashboard()-1)}navigateToActive(){this._router.navigate(["/dashboard",this.activeDashboard()])}navigateTo(e){e>=0&&e<this.dashboards().length?this._router.navigate(["/dashboard",e]):console.error(`[Dashboard Service] Invalid dashboard ID: ${e}`)}navigateToNextDashboard(){let e=null;this.activeDashboard()-1<0?e=this.dashboards().length-1:e=this.activeDashboard()-1,this._router.navigate(["/dashboard",e])}navigateToPreviousDashboard(){let e=null;this.activeDashboard()+1>=this.dashboards().length?e=0:e=this.activeDashboard()+1,this._router.navigate(["/dashboard",e])}deleteWidget(e){this._widgetAction.next({id:e,operation:"delete"})}duplicateWidget(e){this._widgetAction.next({id:e,operation:"duplicate"})}copyWidget(e){this._widgetAction.next({id:e,operation:"copy"})}cutWidget(e){this._widgetAction.next({id:e,operation:"cut"})}setWidgetClipboardFromNode(e){let t=e?.input?.widgetProperties,i=t?.type;i&&this.widgetClipboard.set({w:e.w,h:e.h,selector:e.selector,input:{widgetProperties:{type:i,uuid:"clipboard",config:Yt(t.config)}}})}clearWidgetClipboard(){this.widgetClipboard.set(null)}setStaticDashboard(e){this.isDashboardStatic.set(e)}notifyLayoutEditSaved(){this.layoutEditSaved.update(e=>e+1)}notifyLayoutEditCanceled(){this.layoutEditCanceled.update(e=>e+1)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var xs=(()=>{class n{http=A(ao);connection=A(cs);destroyRef=A(Ie);historyServiceUrl=null;constructor(){this.connection.serverServiceEndpoint$.pipe(De(this.destroyRef)).subscribe(e=>{let t=e?.httpServiceUrl||null;this.historyServiceUrl=t?t.replace("/v1/","/v2/"):null,this.historyServiceUrl||console.warn("[HistoryApiClientService] History API endpoint not available; history service is disabled")})}getPaths(e){return Le(this,null,function*(){try{if(!this.historyServiceUrl)return console.warn("[HistoryApiClientService] No HTTP service URL available"),null;let t=`${this.historyServiceUrl}history/paths`,i=new rs;e?.from&&(i=i.set("from",e.from)),e?.to&&(i=i.set("to",e.to)),e?.duration&&(i=i.set("duration",e.duration.toString()));let o=`${t}?${i.toString()}`;console.log(`[HistoryApiClientService] GET ${o}`);let r=yield Hn(this.http.get(t,{params:i}));return console.log(`[HistoryApiClientService] Retrieved ${r?.length??0} available paths`),r}catch(t){return console.error("[HistoryApiClientService] History API /paths request failed:",t),null}})}getContexts(e){return Le(this,null,function*(){try{if(!this.historyServiceUrl)return console.warn("[HistoryApiClientService] No HTTP service URL available"),null;let t=`${this.historyServiceUrl}history/contexts`,i=new rs;e?.from&&(i=i.set("from",e.from)),e?.to&&(i=i.set("to",e.to)),e?.duration&&(i=i.set("duration",e.duration.toString()));let o=`${t}?${i.toString()}`;console.log(`[HistoryApiClientService] GET ${o}`);let r=yield Hn(this.http.get(t,{params:i}));return console.log(`[HistoryApiClientService] Retrieved ${r?.length??0} available contexts`),r}catch(t){return console.error("[HistoryApiClientService] History API /contexts request failed:",t),null}})}getValues(e){return Le(this,null,function*(){try{if(!this.historyServiceUrl)return console.warn("[HistoryApiClientService] No HTTP service URL available"),null;let t=`${this.historyServiceUrl}history/values`,i=new rs;i=i.set("paths",e.paths),e.context&&(i=i.set("context",e.context)),e.from&&(i=i.set("from",e.from)),e.to&&(i=i.set("to",e.to)),e.duration&&(i=i.set("duration",e.duration.toString())),e.resolution!==void 0&&e.resolution!==null&&(i=i.set("resolution",e.resolution.toString()));let o=`${t}?${i.toString()}`;console.log(`[HistoryApiClientService] GET ${o}`);let r=yield Hn(this.http.get(t,{params:i}));return console.log(`[HistoryApiClientService] History fetch successful, received ${r.data?.length??0} data points`),r}catch(t){return console.error("[HistoryApiClientService] History API request failed:",t),null}})}getProviders(){return Le(this,null,function*(){let e=`${this.historyServiceUrl}history/_providers`;return yield Hn(this.http.get(e)),["kip"]})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Ss=(()=>{class n{mapValuesToChartDatapoints(e,t){let i=e?.data;if(!i||i.length===0)return[];let o=-1,r=-1;if(e.values&&Array.isArray(e.values)){for(let E=0;E<e.values.length;E++){let N=e.values[E]?.method,U=typeof N=="string"?N.toLowerCase():N;if(!U)continue;let j=E+1;U==="sma"?o=j:(U==="avg"||U==="average")&&(r=j)}r<0&&e.values.length===1&&(r=1)}else i[0]?.length>1&&(r=1);let s=t.unit==="rad",l=s?t.domain==="signed"?this.normalizeToSigned.bind(this):this.normalizeToDirection.bind(this):null,m=[],h=0,v=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,C=0,S=0,_=0,F=[];for(let E of i){if(!Array.isArray(E)||E.length===0)continue;let N=Date.parse(E[0]),U=o>=0?E[o]:null,j=r>=0?E[r]:null;if(s?(U=Number.isFinite(U)?l(U):null,j=Number.isFinite(j)?l(j):null):(U=Number.isFinite(U)?U:null,j=Number.isFinite(j)?j:null),Number.isFinite(j)){let B=j;s?(F.push(B),S+=Math.sin(B),_+=Math.cos(B)):(C++,h+=B,B<v&&(v=B),B>y&&(y=B))}m.push({timestamp:N,data:{value:j,sma:U,ema:null,doubleEma:null,lastAverage:null,lastMinimum:null,lastMaximum:null}})}if(m.length>0){let E=null,N=null,U=null;if(s&&F.length>0){E=Math.atan2(S/F.length,_/F.length);let{min:j,max:B}=this.circularMinMaxRad(F);t.domain==="signed"?(E=this.normalizeToSigned(E),N=this.normalizeToSigned(j),U=this.normalizeToSigned(B)):(E=this.normalizeToDirection(E),N=this.normalizeToDirection(j),U=this.normalizeToDirection(B))}else!s&&C>0&&(E=h/C,N=v,U=y);if(E!==null&&N!==null&&U!==null){let j=m[m.length-1];j.data.lastAverage=E,j.data.lastMinimum=N,j.data.lastMaximum=U}}return m}circularMinMaxRad(e){if(e.length===0)return{min:0,max:0};let t=e.map(r=>(r*180/Math.PI+360)%360).sort((r,s)=>r-s),i=0,o=0;for(let r=0;r<t.length;r++){let s=(r+1)%t.length,l=(t[s]-t[r]+360)%360;l>i&&(i=l,o=s)}return{min:t[o]*Math.PI/180,max:t[(o-1+t.length)%t.length]*Math.PI/180}}mod(e,t){return(e%t+t)%t}normalizeToDirection(e){let t=2*Math.PI;return this.mod(e,t)}normalizeToSigned(e){let t=2*Math.PI;return this.mod(e+Math.PI,t)-Math.PI}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Cn=(()=>{class n{appSettings=A(Ht);data=A(st);history=A(xs);historyChartAdapter=A(Ss);historyMinSampleTimeMs=1e3;_svcDatasetConfigs=[];_svcDataSource=[];_svcSubjectObserverRegistry=[];_startAllPromise;signedAnglePaths=new Set(["self.navigation.attitude.roll","self.navigation.attitude.pitch","self.navigation.attitude.yaw","self.environment.wind.angleApparent","self.environment.wind.angleTrueGround","self.environment.wind.angleTrueWater","self.steering.rudderAngle"]);constructor(){this._svcDatasetConfigs=this.appSettings.getDataSets(),this.cleanupDatasets(),this._startAllPromise=this.startAll()}cleanupDatasets(){if(this.appSettings.configUpgrade()||this.appSettings.getAppConfig().configVersion<12)return;let t=this.appSettings.getDashboardConfig(),i=new Set;t.forEach(l=>{l.configuration?.length&&l.configuration?.forEach(m=>{m?.id&&i.add(m.id)})});function o(l){let m=l.match(/^(windtrends|speedtrends)-(.+)$/);return m?m[2]:null}let r=[],s=[];for(let l of this._svcDatasetConfigs){let m=l.label||"",h=!1;if(m.startsWith("windtrends-")||m.startsWith("speedtrends-")){let v=o(m);h=!!(v&&i.has(v))}else(m.startsWith("simple-chart-")||(m.match(/\|/g)||[]).length===4)&&(h=i.has(l.uuid));h?s.push(l):r.push(l)}r.length&&(r.forEach(l=>{console.warn(`[DatasetStreamService] Cleaned dataset: uuid=${l.uuid}, label="${l.label}"`)}),this._svcDatasetConfigs=s,this.appSettings.saveDataSets(this._svcDatasetConfigs))}setupServiceSubjectRegistry(e,t){let i=this._svcSubjectObserverRegistry.findIndex(o=>o.datasetUuid==e);i>=0&&(this._svcSubjectObserverRegistry[i].rxjsSubject.complete(),this._svcSubjectObserverRegistry.splice(i,1)),this._svcSubjectObserverRegistry.push({datasetUuid:e,rxjsSubject:new vc(t)})}createDataSourceConfiguration(e){let r={uuid:e.uuid,pathObserverSubscription:null,sampleTime:null,maxDataPoints:null,smoothingPeriod:null,historicalData:[]},s=m(e.timeScaleFormat,e.period),l=s>0?Math.max(100,Math.round(s/120)):1e3;return r.sampleTime=l,r.maxDataPoints=Math.max(1,Math.ceil(s/l)),r.smoothingPeriod=Math.max(1,Math.floor(r.maxDataPoints*.25)),(!r.maxDataPoints||r.maxDataPoints<1)&&(r.maxDataPoints=1),(!r.sampleTime||r.sampleTime<1)&&(r.sampleTime=1),r;function m(h,v){switch(h){case"Last Minute":return 6e4;case"Last 5 Minutes":return 5*6e4;case"Last 30 Minutes":return 30*6e4;case"day":return Math.max(0,v)*24*60*6e4;case"hour":return Math.max(0,v)*60*6e4;case"minute":return Math.max(0,v)*6e4;case"second":return Math.max(0,v)*1e3;default:return 0}}}waitUntilReady(){return Le(this,null,function*(){return this._startAllPromise})}startAll(){return Le(this,null,function*(){console.log("[DatasetStreamService] Auto Starting "+this._svcDatasetConfigs.length.toString()+" Datasets");for(let e of this._svcDatasetConfigs)yield this.start(e.uuid)})}start(e){return Le(this,null,function*(){let t=this._svcDatasetConfigs.find(v=>v.uuid==e);if(!t){console.warn(`[DatasetStreamService] Dataset UUID:${e} not found`);return}let i=this.createDataSourceConfiguration(t);this.setupServiceSubjectRegistry(i.uuid,i.maxDataPoints);let o=this._svcDataSource[this._svcDataSource.push(i)-1];console.log(`[DatasetStreamService] Starting recording process: ${t.path}, Scale: ${t.timeScaleFormat}, Period: ${t.period}, Datapoints: ${i.maxDataPoints}`);let r=this.resolveAngleDomain(t.path,t.baseUnit),s=Math.max(1,Math.round(i.sampleTime/1e3));this.shouldSeedHistory(i.sampleTime)&&(yield this.seedHistoryData(o,t,s,r));let l=this.data.subscribePath(t.path,t.pathSource).pipe(_i(v=>v?.data?.value!==null),zr({bufferSize:1,refCount:!0})),m=l.pipe(mi(1)),h=xa(i.sampleTime,i.sampleTime).pipe(Ic(l,(v,y)=>y));o.pathObserverSubscription=wi(m,h).subscribe(v=>{o.maxDataPoints>0&&o.historicalData.length>=o.maxDataPoints&&o.historicalData.shift(),o.historicalData.push(v.data.value);let y=this.updateDataset(o,t.baseUnit,r);this._svcSubjectObserverRegistry.find(C=>C.datasetUuid===o.uuid).rxjsSubject.next(y)})})}seedHistoryData(e,t,i,o){return Le(this,null,function*(){try{let r=this.buildHistoryPathString(t.path,e.smoothingPeriod),s=(()=>{switch(t.timeScaleFormat){case"Last Minute":return 6e4;case"Last 5 Minutes":return 5*6e4;case"Last 30 Minutes":return 30*6e4;case"day":return Math.max(0,t.period)*24*60*6e4;case"hour":return Math.max(0,t.period)*60*6e4;case"minute":return Math.max(0,t.period)*6e4;case"second":return Math.max(0,t.period)*1e3;default:return 0}})(),l=new Date,m={paths:r,from:new Date(l.getTime()-s).toISOString(),resolution:i},h=yield this.history.getValues(m);if(!h||!h.data||h.data.length===0){console.log(`[DatasetStreamService] No history data available for ${t.path}`);return}let v=this.convertHistoryToDatapoints(h,t.baseUnit,o),y=this._svcSubjectObserverRegistry.find(C=>C.datasetUuid===e.uuid)?.rxjsSubject;if(y&&v.length>0){let C=[];e.historicalData=[],v.forEach(S=>{let _=S.data.value;if(!Number.isFinite(_))return;e.maxDataPoints>0&&e.historicalData.length>=e.maxDataPoints&&e.historicalData.shift(),e.historicalData.push(_);let F=this.updateDataset(e,t.baseUnit,o);F.timestamp=S.timestamp,C.push(F)}),C.forEach(S=>y.next(S)),console.log(`[DatasetStreamService] Seeded ${C.length} history datapoints for ${t.path}`)}}catch(r){console.warn(`[DatasetStreamService] Failed to seed history data for ${t.path}:`,r)}})}stop(e){let t=this._svcDataSource.findIndex(i=>i.uuid==e);console.log(`[DatasetStreamService] Stopping Dataset ${e} data capture`),this._svcDataSource[t].pathObserverSubscription.unsubscribe(),this._svcDataSource.splice(t,1)}list(){return Yt(this._svcDatasetConfigs)}getDatasetConfig(e){return this._svcDatasetConfigs.find(t=>t.uuid===e)}getDataSourceInfo(e){return this._svcDataSource.find(t=>t.uuid===e)}create(e,t,i,o,r,s=!0,l=!0,m){if(!e||!t||!i||!o||!r)return null;let h=m||Di.create(),v={uuid:h,path:e,pathSource:t,baseUnit:this.data.getPathUnitType(e),timeScaleFormat:i,period:o,label:r,editable:l};return console.log(`[DatasetStreamService] Creating ${s?"":"non-"}persistent ${l?"":"hidden "}dataset: ${v.uuid}, Path: ${v.path}, Source: ${v.pathSource} Scale: ${v.timeScaleFormat}, Period: ${v.period}`),this._svcDatasetConfigs.push(v),this.start(h),s===!0&&this.appSettings.saveDataSets(this._svcDatasetConfigs),h}edit(e,t=!0){let i=this._svcDatasetConfigs.find(o=>o.uuid===e.uuid);return i?JSON.stringify(i)===JSON.stringify(e)?(console.log(`[DatasetStreamService] No changes detected for Dataset ${e.uuid}.`),!1):(this.stop(e.uuid),console.log(`[DatasetStreamService] Updating Dataset: ${e.uuid}`),e.baseUnit=this.data.getPathUnitType(e.path),this._svcDatasetConfigs.splice(this._svcDatasetConfigs.findIndex(o=>o.uuid===e.uuid),1,e),this.start(e.uuid),t===!0&&this.appSettings.saveDataSets(this._svcDatasetConfigs),!0):!1}remove(e,t=!0){return!e||e===""||this._svcDatasetConfigs.findIndex(i=>i.uuid===e)===-1?!1:(this.stop(e),console.log(`[DatasetStreamService] Removing ${t?"":"non-"}persistent Dataset: ${e}`),this._svcDatasetConfigs.splice(this._svcDatasetConfigs.findIndex(i=>i.uuid===e),1),this._svcSubjectObserverRegistry.find(i=>i.datasetUuid===e).rxjsSubject.complete(),this._svcSubjectObserverRegistry.splice(this._svcSubjectObserverRegistry.findIndex(i=>i.datasetUuid===e),1),t===!0&&this.appSettings.saveDataSets(this._svcDatasetConfigs),!0)}getDatasetObservable(e){let t=this._svcSubjectObserverRegistry.find(i=>i.datasetUuid==e);return t?t.rxjsSubject.asObservable():null}getDatasetBatchThenLiveObservable(e){let t=this._svcSubjectObserverRegistry.find(l=>l.datasetUuid==e);if(!t)return null;let i=t.rxjsSubject,o=i._buffer?i._buffer.slice():[],r=yc([o]),s=i.pipe(Ur(o.length));return xc(r,s)}updateDataset(e,t,i="scalar"){let o=null,r=null,s=null,l=null;if(t==="rad"){o=this.circularMeanRad(e.historicalData);let y=e.historicalData.slice(-e.smoothingPeriod);r=this.circularMeanRad(y);let{min:C,max:S}=this.circularMinMaxRad(e.historicalData);i==="direction"?(o=this.normalizeToDirection(o),r=this.normalizeToDirection(r),s=this.normalizeToDirection(C),l=this.normalizeToDirection(S)):i==="signed"?(o=this.normalizeToSigned(o),r=this.normalizeToSigned(r),s=this.normalizeToSigned(C),l=this.normalizeToSigned(S)):(s=C,l=S)}else o=h(e.historicalData),r=v(e.historicalData,e.smoothingPeriod),s=Math.min(...e.historicalData),l=Math.max(...e.historicalData);return{timestamp:Date.now(),data:{value:t==="rad"?i==="signed"?this.normalizeToSigned(e.historicalData[e.historicalData.length-1]):this.normalizeToDirection(e.historicalData[e.historicalData.length-1]):e.historicalData[e.historicalData.length-1],sma:r,ema:null,doubleEma:null,lastAverage:o,lastMinimum:s,lastMaximum:l}};function h(y){return y.length===0?null:y.reduce((S,_)=>S+_,0)/y.length}function v(y,C){y.length<C&&(C=y.length);let S=0;for(let _=y.length-C;_<y.length;_++)S+=y[_];return S/C}}circularMeanRad(e){if(e.length===0)return 0;let t=e.reduce((o,r)=>o+Math.sin(r),0),i=e.reduce((o,r)=>o+Math.cos(r),0);return Math.atan2(t/e.length,i/e.length)}circularMinMaxRad(e){if(e.length===0)return{min:0,max:0};let t=e.map(l=>(l*180/Math.PI+360)%360).sort((l,m)=>l-m),i=0,o=0;for(let l=0;l<t.length;l++){let m=(l+1)%t.length,h=(t[m]-t[l]+360)%360;h>i&&(i=h,o=m)}let r=t[o]*Math.PI/180,s=t[(o-1+t.length)%t.length]*Math.PI/180;return{min:r,max:s}}resolveAngleDomain(e,t){if(t!=="rad")return"scalar";let i=this.normalizePathKey(e);for(let o of this.signedAnglePaths)if(i===this.normalizePathKey(o))return"signed";return"direction"}normalizePathKey(e){return e.replace(/^vessels\.self\./,"").replace(/^self\./,"")}mod(e,t){return(e%t+t)%t}normalizeToDirection(e){let t=2*Math.PI;return this.mod(e,t)}normalizeToSigned(e){let t=2*Math.PI;return this.mod(e+Math.PI,t)-Math.PI}removeIfExists(e,t=!0){return!e||this._svcDatasetConfigs.findIndex(i=>i.uuid===e)===-1?!1:this.remove(e,t)}shouldSeedHistory(e){return e>=this.historyMinSampleTimeMs}buildHistoryPathString(e,t){let i=e.replace(/^(vessels\.)?self\./,"");return[`${i}:sma:${t}`,`${i}:avg`,`${i}:min`,`${i}:max`].join(",")}convertHistoryToDatapoints(e,t,i){return this.historyChartAdapter.mapValuesToChartDatapoints(e,{unit:t,domain:i})}ngOnDestroy(){[...this._svcDataSource].forEach(e=>{try{this.stop(e.uuid)}catch(t){}}),this._svcSubjectObserverRegistry.forEach(e=>e.rxjsSubject.complete()),this._svcSubjectObserverRegistry=[]}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var am=(()=>{class n{kipTimers={};constructor(){}createTimer(e,t,i){return e in this.kipTimers?this.kipTimers[e].currentValue.asObservable():(this.kipTimers[e]={currentValue:new sn(t),timeoutID:null,intervalMS:i},this.kipTimers[e].currentValue.asObservable())}startTimer(e){Object.prototype.hasOwnProperty.call(this.kipTimers,e)&&this.kipTimers[e].timeoutID===null&&(this.kipTimers[e].timeoutID=setInterval(()=>{this.kipTimers[e].currentValue.next(this.kipTimers[e].currentValue.value+1)},this.kipTimers[e].intervalMS))}stopTimer(e){Object.prototype.hasOwnProperty.call(this.kipTimers,e)&&this.kipTimers[e].timeoutID!==null&&(clearInterval(this.kipTimers[e].timeoutID),this.kipTimers[e].timeoutID=null)}setTimer(e,t){Object.prototype.hasOwnProperty.call(this.kipTimers,e)&&this.kipTimers[e].currentValue.next(t)}deleteTimer(e){Object.prototype.hasOwnProperty.call(this.kipTimers,e)&&(this.stopTimer(e),this.kipTimers[e].currentValue.complete(),delete this.kipTimers[e])}isRunning(e){let t=!1;return e in this.kipTimers&&(t=this.kipTimers[e].timeoutID!==null),t}ngOnDestroy(){Object.keys(this.kipTimers).forEach(e=>{this.kipTimers[e].timeoutID&&(clearInterval(this.kipTimers[e].timeoutID),this.kipTimers[e].timeoutID=null),this.kipTimers[e].currentValue.complete()}),this.kipTimers={}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var om=(()=>{class n{sanitizer=A(oo);transform(e){return this.sanitizer.bypassSecurityTrustResourceUrl(e)}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=Qr({name:"safe",type:n,pure:!0})}return n})();var m0={minDist:230,maxDur:550,minVelocity:1.5,axisDominance:1.8,deadzoneMs:160,purityRatio:.8,lockThreshold:28,directionLockAngle:25,reversalPrimaryThreshold:34};function xo(n){let a=Z(Z({},m0),n);return`(() => {
2
+ if (window.__kipSwipeInit) return; window.__kipSwipeInit = true;
3
+ const instanceId='${a.instanceId}';
4
+ let pointerId=null; let startX=0; let startY=0; let startT=0; let peakPrimary=0; let peakCross=0; let cancelled=false;
5
+ let lockedAxis=null; let lockedPrimarySign=0; let reversed=false;
6
+ const minDist=${a.minDist};
7
+ const maxDur=${a.maxDur};
8
+ const minVelocity=${a.minVelocity};
9
+ const axisDominance=${a.axisDominance};
10
+ const deadzoneMs=${a.deadzoneMs};
11
+ const purityRatio=${a.purityRatio};
12
+ const lockThreshold=${a.lockThreshold};
13
+ const directionLockAngle=${a.directionLockAngle};
14
+ const reversalPrimaryThreshold=${a.reversalPrimaryThreshold};
15
+ function reset(){pointerId=null; cancelled=false; lockedAxis=null; lockedPrimarySign=0; reversed=false;}
16
+ function onDown(e){ if(pointerId!==null) return; pointerId=e.pointerId; startX=e.clientX; startY=e.clientY; startT=performance.now(); peakPrimary=0; peakCross=0; cancelled=false; lockedAxis=null; lockedPrimarySign=0; reversed=false; }
17
+ function track(e){ if(e.pointerId!==pointerId||cancelled) return; const dx=e.clientX-startX; const dy=e.clientY-startY; const adx=Math.abs(dx); const ady=Math.abs(dy); const primary=adx>ady?adx:ady; const cross=adx>ady?ady:adx; peakPrimary=Math.max(peakPrimary,primary); peakCross=Math.max(peakCross,cross);
18
+ if(!lockedAxis && primary>=lockThreshold){ lockedAxis = adx>ady?'x':'y'; lockedPrimarySign = lockedAxis==='x' ? (Math.sign(dx)||1) : (Math.sign(dy)||1); }
19
+ if(lockedAxis){
20
+ const angleRad = Math.atan2(lockedAxis==='x'?ady:adx, lockedAxis==='x'?adx:ady); // angle from primary axis
21
+ const angleDeg = angleRad * 180 / Math.PI;
22
+ if(angleDeg > directionLockAngle){ cancelled=true; return; }
23
+ if(lockedAxis==='x' && Math.sign(dx) && Math.sign(dx)!==lockedPrimarySign && Math.abs(dx) > reversalPrimaryThreshold){ reversed=true; cancelled=true; return; }
24
+ if(lockedAxis==='y' && Math.sign(dy) && Math.sign(dy)!==lockedPrimarySign && Math.abs(dy) > reversalPrimaryThreshold){ reversed=true; cancelled=true; return; }
25
+ }
26
+ if (!cancelled && peakCross>42 && peakCross*axisDominance>peakPrimary) { cancelled=true; }
27
+ }
28
+ function onUp(e){ if(e.pointerId!==pointerId) return; const endT=performance.now(); const dt=endT-startT; const dx=e.clientX-startX; const dy=e.clientY-startY; const adx=Math.abs(dx); const ady=Math.abs(dy); const dist=Math.hypot(dx,dy); const velocity=dist/dt; const primary=adx>ady?adx:ady; const cross=adx>ady?ady:adx; const purity= primary? (primary/dist):0; if(!cancelled && !reversed && dt>=deadzoneMs && dt<=maxDur && dist>=minDist && velocity>=minVelocity && purity>=purityRatio && primary/Math.max(cross,1)>=axisDominance){ if(adx>ady){ window.parent.postMessage({gesture: dx>0?'swiperight':'swipeleft', eventData:{dx,dy,duration:dt,velocity,instanceId}}, '*'); } else { window.parent.postMessage({gesture: dy>0?'swipedown':'swipeup', eventData:{dx,dy,duration:dt,velocity,instanceId}}, '*'); } } reset(); }
29
+ function onCancel(e){ if(e.pointerId===pointerId) reset(); }
30
+ document.addEventListener('pointerdown', onDown, {passive:true});
31
+ document.addEventListener('pointermove', track, {passive:true});
32
+ document.addEventListener('pointerup', onUp, {passive:true});
33
+ document.addEventListener('pointercancel', onCancel, {passive:true});
34
+ document.addEventListener('keydown', (event) => {
35
+ if (event.ctrlKey && event.shiftKey && ['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','E','F','N'].includes(event.key)) {
36
+ window.parent.postMessage({ type:'keydown', keyEventData:{ key:event.key, ctrlKey:event.ctrlKey, shiftKey:event.shiftKey, instanceId }}, '*');
37
+ }
38
+ });
39
+ })();`}var xe=(()=>{class n{config=x();defaultConfig=w(void 0);runtimeConfig=ft();_runtimeConfig=w(void 0);lastBaseRef;lastUserRef;lastMergedRef;options=L(()=>{let e=this.defaultConfig(),t=this._runtimeConfig();if(this.lastMergedRef&&e===this.lastBaseRef&&t===this.lastUserRef)return this.lastMergedRef;let i;return e&&t?i=fu(Yt(e),Yt(t)):e&&!t?i=Yt(e):!e&&t?i=Yt(t):i=void 0,this.lastBaseRef=e,this.lastUserRef=t,this.lastMergedRef=i,this.runtimeConfig.emit(i),i});firstPathKey=L(()=>{let e=this.options();if(!e?.paths)return;let t=Object.keys(e.paths);return t.length?t[0]:void 0});constructor(){W(()=>{let e=this.config();z(()=>{e&&this.setRuntimeConfig(e)})})}getPathCfg(e){return this.options()?.paths?.[e]}setRuntimeConfig(e){this._runtimeConfig.set(e)}initialize(e,t){e&&this.defaultConfig.set(e),t&&this._runtimeConfig.set(t)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["","widget-runtime",""]],inputs:{config:[1,"config"]},outputs:{runtimeConfig:"runtimeConfig"},exportAs:["widgetRuntime"]})}return n})();var p0=["freeboardSkIframe"];function g0(n,a){if(n&1&&(ee(0,"iframe",1,0),ut(2,"safe")),n&2){let e=T();ji("src",Et(2,1,e.widgetUrl),Sa)}}function f0(n,a){n&1&&ee(0,"div",4)}function v0(n,a){if(n&1&&(D(0,"div",2),ee(1,"iframe",3,0),ut(3,"safe"),I(4,f0,1,0,"div",4),G()),n&2){let e=T();f(),ji("src",Et(3,2,e.widgetUrl),Sa),f(3),P(e.dashboard.isDashboardStatic()?-1:4)}}var rm=(()=>{class n{id=x();type=x();theme=x();disableWidgetShell=x(!1);swipeDisabled=x(!1);runtime=A(xe,{optional:!0});appSettings=A(Ht);app=A(Fi);auth=A(bu);dashboard=A(Tt);iframe=he.required("freeboardSkIframe");authToken=Ii(this.auth.authToken$,{initialValue:null});viewReady=!1;iframeLoaded=!1;widgetUrl=null;static DEFAULT_CONFIG={};constructor(){window.addEventListener("message",this.handleIframeGesture),W(()=>{let e=this.authToken();z(()=>{let t=e?.token;this.widgetUrl=t?`${this.appSettings.signalkUrl.url}/@signalk/freeboard-sk/?token=${t}`:`${this.appSettings.signalkUrl.url}/@signalk/freeboard-sk/`})}),W(()=>{let e=this.app.isNightMode();z(()=>{!this.iframeLoaded||!this.viewReady||this.appSettings.getRedNightMode()&&this.sendMessage({commands:{nightModeEnable:e}})})})}ngAfterViewInit(){this.viewReady=!0;try{this.iframe().nativeElement.onload=()=>{this.iframeLoaded=!0,this.sendMessage({settings:{autoNightMode:!1}}),this.injectSwipeScript()}}catch(e){}}sendMessage(e,t="*"){let i=this.iframe()?.nativeElement?.contentWindow;i&&this.iframeLoaded&&i.postMessage(e,t)}injectSwipeScript(){if(this.swipeDisabled())return;let e=this.iframe().nativeElement.contentWindow,t=this.iframe().nativeElement.contentDocument;if(!t||!e){console.error("[FSK Widget] Iframe contentDocument or contentWindow is undefined.");return}try{let i=`kip-gesture-inject-${this.id()}`;if(t.getElementById(i))return;let o=xo({instanceId:this.id()}),r=t.createElement("script");r.id=i,r.textContent=o,t.body.appendChild(r)}catch(i){console.warn("[FSK Widget] Failed to inject swipe script into iframe:",i)}}handleIframeGesture=e=>{if(!e.data||!this.viewReady)return;let t=null;try{t=this.iframe()?.nativeElement?.contentWindow??null}catch(r){t=null}if(!t||e.source!==t)return;let i=this.getExpectedIframeOrigin();if(i&&e.origin!==i)return;let o=this.id();if(e.data.gesture&&e.data.eventData?.instanceId===o)switch(e.data.gesture){case"swipeup":this.dashboard.isDashboardStatic()&&this.dashboard.navigateToPreviousDashboard();break;case"swipedown":this.dashboard.isDashboardStatic()&&this.dashboard.navigateToNextDashboard();break;case"swipeleft":window.document.dispatchEvent(new Event("openLeftSidenav",{bubbles:!0,cancelable:!0}));break;case"swiperight":window.document.dispatchEvent(new Event("openRightSidenav",{bubbles:!0,cancelable:!0}));break}if(e.data.type==="keydown"&&e.data.keyEventData?.instanceId===o){let{key:r,ctrlKey:s,shiftKey:l}=e.data.keyEventData,m=new KeyboardEvent("keydown",{key:r,ctrlKey:s,shiftKey:l,bubbles:!0,cancelable:!0});document.dispatchEvent(m)}};getExpectedIframeOrigin(){let e=this.widgetUrl||this.appSettings.signalkUrl.url;if(!e)return null;try{return new URL(e).origin}catch(t){return null}}ngOnDestroy(){if(window.removeEventListener("message",this.handleIframeGesture),this.iframe){try{this.iframe().nativeElement.onload=null}catch(e){}try{let e=this.iframe()?.nativeElement.contentDocument;if(e){let t=`kip-gesture-inject-${this.id()}`,i=e.getElementById(t);i&&i.parentNode&&i.parentNode.removeChild(i)}}catch(e){}}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-freeboardsk"]],viewQuery:function(t,i){t&1&&_e(i.iframe,p0,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],disableWidgetShell:[1,"disableWidgetShell"],swipeDisabled:[1,"swipeDisabled"]},decls:2,vars:1,consts:[["freeboardSkIframe",""],["width","100%","height","100%","frameborder","0","sandbox","allow-same-origin allow-scripts allow-forms",1,"freeboardsk-iframe","no-shell",3,"src"],[1,"widget-shell",2,"overflow","clip","position","relative","width","100%","height","100%"],["width","100%","height","100%","frameborder","0","sandbox","allow-same-origin allow-scripts allow-forms",1,"freeboardsk-iframe",3,"src"],[1,"widgetOverlay"]],template:function(t,i){t&1&&I(0,g0,3,3,"iframe",1)(1,v0,5,4,"div",2),t&2&&P(i.disableWidgetShell()?0:1)},dependencies:[om],styles:[".widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent}"],changeDetection:0})}return n})();var b0={1e3:"notification",1001:"alert",1002:"warn",1003:"alarm",1004:"emergency"},sm=(()=>{class n{settings=A(Ht);toastService=A(gn);audioBlockedNotificationShown=!1;data=A(st);requests=A(vi);static ALARM_SEVERITIES={normal:{sound:0,visual:0},nominal:{sound:0,visual:0},alert:{sound:1,visual:0},warn:{sound:2,visual:1},alarm:{sound:3,visual:2},emergency:{sound:4,visual:2}};_notificationSettingsSubscription=null;_notificationDataStreamSubscription=null;_notificationMetaStreamSubscription=null;_resetServiceSubscription=null;_notificationConfig;_notificationConfig$=new sn(Hc);_notifications=[];_notifications$=new sn([]);_alarmsInfo$=new sn({audioSev:0,visualSev:0,alarmCount:0,isMuted:!1});_players=new Map;_activeAlarmSoundtrack=null;_isMuted=!1;_lastEmittedValue=null;constructor(){this._notificationSettingsSubscription=this.settings.getNotificationServiceConfigAsO().subscribe(e=>{this._notificationConfig=e,this.reset(),this._notificationConfig$.next(e),this._notificationConfig.disableNotifications&&!this._notificationDataStreamSubscription?.closed&&this.stopNotificationStream(),!this._notificationConfig.disableNotifications&&(this._notificationDataStreamSubscription===null||this._notificationDataStreamSubscription?.closed)&&this.startNotificationStream(),this._notificationConfig.sound.disableSound?this.playAlarm(1e3):this.updateNotificationsState()}),this._resetServiceSubscription=this.data.isResetService().subscribe(e=>{e&&this.reset()}),this.getPlayer(1e3)}startNotificationStream(){this._notificationDataStreamSubscription=this.data.getNotificationMsgObservable().subscribe(e=>this.processNotificationDeltaMsg(e)),this._notificationMetaStreamSubscription=this.data.getNotificationMetaObservable().subscribe(e=>this.processNotificationDeltaMeta(e))}stopNotificationStream(){this._notificationDataStreamSubscription?.unsubscribe(),this._notificationMetaStreamSubscription?.unsubscribe(),this.reset()}reset(){this._notificationConfig.disableNotifications&&(this._notifications=[],this._notifications$.next([])),this.updateNotificationsState()}emitNotifications(){this._notifications$.next([...this._notifications])}observeNotifications(){return this._notifications$.asObservable()}addValue(e){this._notifications.push({path:e.path,value:e.value}),this.updateNotificationsState(),this.emitNotifications()}updateValue(e){let t=this._notifications.findIndex(i=>i.path==e.path);if(t>=0){let i=this._notifications[t];this._notifications[t]=ge(Z({},i),{value:Z({},e.value)}),this.updateNotificationsState(),this.emitNotifications()}else console.log("[Notification Service] Update path not found for: "+e.path)}deleteValue(e){let t=this._notifications.findIndex(i=>i.path==e);if(t>=0){let i=this._notifications[t];this._notifications[t]=ge(Z({},i),{value:void 0}),this.updateNotificationsState(),this.emitNotifications()}else console.log("[Notification Service] Notification to delete not found for: "+e)}updateNotificationsState(){let e=0,t=0,i=0;for(let r of this._notifications){if(!r.value||!("method"in r.value)||r.value.method.length===0||r.value.state===J.Normal&&!this._notificationConfig.devices.showNormalState||r.value.state===J.Nominal&&!this._notificationConfig.devices.showNominalState)continue;i++;let{aSev:s,vSev:l}=this.getNotificationSeverity(r);e=Math.max(e,s),t=Math.max(t,l)}this._notificationConfig.sound.disableSound||this.playAlarm(1e3+e);let o={audioSev:e,visualSev:t,alarmCount:i,isMuted:this._isMuted};Ei(o,this._lastEmittedValue)||(this._alarmsInfo$.next(o),this._lastEmittedValue=o)}processNotificationDeltaMsg(e){if(!e.path.startsWith("notifications.security"))if(e.value===null)this.deleteValue(e.path);else{let t=this._notifications.find(i=>i.path==e.path);t?(!t.value||t.value.state!==e.value.state||t.value.message!==e.value.message||!Ei(t.value.method,e.value.method))&&this.updateValue(e):this.addValue(e)}}processNotificationDeltaMeta(e){let t=this._notifications.findIndex(i=>i.path==e.path);if(t>=0){let i=this._notifications[t];this._notifications[t]=ge(Z({},i),{meta:e.meta})}else this._notifications.push({path:e.path,meta:e.meta});this.emitNotifications()}getNotificationSeverity(e){let t=e.value.state,i=n.ALARM_SEVERITIES[t];if(!i)return console.log(`[Notification Service] Unknown Notification State
40
+ `+JSON.stringify(e)),{aSev:0,vSev:0};let o=i.sound,r=i.visual;return(!e.value.method.includes(Ul.Sound)||this._notificationConfig.sound[`mute${t.charAt(0).toUpperCase()+t.slice(1)}`]||this._isMuted)&&(o=0),e.value.method.includes(Ul.Visual)||(r=0),{aSev:o,vSev:r}}setSkMethod(e,t){this.requests.putRequest(`${e}.method`,t,Di.create())}setSkState(e,t){this.requests.putRequest(`${e}.state`,t,Di.create())}observerNotificationsInfo(){return this._alarmsInfo$.pipe(si(e=>{let t=!1,i=!1;switch(e.visualSev){case 1:t=!0;break;case 2:i=!0;break}return ge(Z({},e),{isWarn:t,isAlarmEmergency:i})}))}getPlayer(e){let t=this._players.get(e);if(t)return t;let i=b0[e];if(!i)return console.warn("[Notification Service] Unknown track id",e),this.getPlayer(1e3);let o=new Audio(`assets/${i}.mp3`);return o.preload="auto",o.loop=!0,o.muted=this._isMuted,this._players.set(e,o),o}mutePlayer(e){if(this._activeAlarmSoundtrack!=null&&this._activeAlarmSoundtrack!==1e3){let t=this._players.get(this._activeAlarmSoundtrack);t&&(t.muted=e)}this._isMuted=e,this.updateNotificationsState()}playAlarm(e){if(this._activeAlarmSoundtrack===e)return;if(this._activeAlarmSoundtrack!=null){let i=this._players.get(this._activeAlarmSoundtrack);i&&(i.pause(),i.currentTime=0)}if(e===1e3){this._activeAlarmSoundtrack=1e3;return}let t=this.getPlayer(e);this._activeAlarmSoundtrack=e,t.muted=this._isMuted,t.currentTime=0,t.play().catch(i=>{console.debug("Alarm audio playback blocked:",i.message),this.audioBlockedNotificationShown||(this.audioBlockedNotificationShown=!0,this.toastService.show("Alarm sounds blocked by browser. Closing this message will enable audio.",0,!0,"warn").afterDismissed().subscribe(()=>{this.audioBlockedNotificationShown=!1}))})}observeNotificationConfiguration(){return this._notificationConfig$.asObservable()}ngOnDestroy(){this._notificationSettingsSubscription?.unsubscribe(),this._resetServiceSubscription?.unsubscribe(),this._notificationDataStreamSubscription?.unsubscribe(),this._notificationMetaStreamSubscription?.unsubscribe(),this._notificationConfig$.complete(),this._notifications$.complete(),this._alarmsInfo$.complete();for(let e of this._players.values())try{e.pause(),e.currentTime=0,e.src=""}catch(t){}this._players.clear()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var ws=class n{static DEBUG=!1;isChromeOnMac;isFirefox;static _suppressAllGesturesUntil=0;static _instanceCounter=0;_instanceId;static _laneOwners=new Map;static _activePointers=new Set;static _multiPointerActive=!1;static _instanceToEl=new Map;swipeMinDistance=x(30);swipeMaxDuration=x(600);longPressMs=x(500);doubleTapInterval=x(300);tapSlop=x(20);pressMoveSlop=x(10);mode=x("all");disableGestures=x(!1);enablePress=x(!0);enableDoubleTap=x(!0);bridgeUiEvents=x(!1);_swipeMinDistance=30;_swipeMaxDuration=600;_longPressMs=500;_doubleTapInterval=300;_tapSlop=20;_pressMoveSlop=10;swipeleft=ft();swiperight=ft();swipeup=ft();swipedown=ft();press=ft();doubletap=ft();destroyRef=A(Ie);host=A(nt);pointerId=null;startX=0;startY=0;startTime=0;tracking=!1;longPressTimer=null;pressFired=!1;ownedLanes={h:!1,v:!1,p:!1};cancelLongpressHandlers=[];lastTapTime=0;lastTapX=0;lastTapY=0;currentPointerType=null;lastTapUpTime=0;lastTapUpX=0;lastTapUpY=0;potentialDoubleTap=!1;onContextMenu=a=>{a.preventDefault()};lockedAxis=null;axisLockThreshold=6;captureEl=null;static MOVES_BUFFER_SIZE=120;moveSamples=[];constructor(){this.isChromeOnMac=(()=>{let i=navigator.userAgent,o=navigator.platform;return/Chrome\//.test(i)&&/Mac/.test(o)&&!/Edg\//.test(i)&&!/OPR\//.test(i)})(),this.isFirefox=/Firefox\//.test(navigator.userAgent),this._instanceId=++n._instanceCounter,this.debug("GestureDirective instance created",{instanceId:this._instanceId});try{n._instanceToEl.set(this._instanceId,this.host.nativeElement)}catch(i){}let a=this.host.nativeElement;a.style.touchAction||(a.style.touchAction="none","webkitTouchCallout"in a.style&&(a.style.webkitTouchCallout="none"),a.style.userSelect||(a.style.userSelect="none"),a.style.webkitUserSelect===""&&(a.style.webkitUserSelect="none"),a.style.webkitTapHighlightColor="transparent"),a.addEventListener("pointerdown",this.onPointerDown,{passive:!1,capture:!0}),a.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),a.addEventListener("pointerrawupdate",this.onPointerRawUpdate,{passive:!0,capture:!0}),a.addEventListener("pointerup",this.onPointerUp,{passive:!0}),a.addEventListener("pointercancel",this.onPointerCancel,{passive:!0,capture:!0}),a.addEventListener("lostpointercapture",this.onLostPointerCapture,{passive:!0,capture:!0}),a.addEventListener("dblclick",this.onNativeDblClick,{passive:!0});let e=i=>{let o=i;if(o.detail?.__gid===this._instanceId||this.disableGestures())return;let s=o.target,l=!!(s&&s!==this.host.nativeElement&&this.host.nativeElement.contains(s)),m=this.modeAllowsHorizontal(),h=this.modeAllowsVertical(),v=this.modeAllowsPress(),y=this.modeAllowsDoubleTap();if(l&&(o.type==="press"||o.type==="doubletap")&&(v=v||o.type==="press",y=y||o.type==="doubletap"),o.type==="press"||o.type==="doubletap"){let C=this.host.nativeElement,S=s&&typeof s.closest=="function"?s.closest(".widget-container"):null;S&&S!==C&&(v=!1,y=!1);let _=C.classList?.contains("grid-stack")||C.tagName?.toLowerCase()==="gridstack",F=s&&typeof s.closest=="function"?s.closest(".grid-stack-item"):null;_&&F&&(v=!1,y=!1,this.debug("suppress grid-root rebroadcast for press/doubletap inside grid-stack-item",{host:this.elDesc(C),target:this.elDesc(s??void 0),inGridItem:this.elDesc(F)}))}switch(this.debug("rebroadcast gate",{type:o.type,allowH:m,allowV:h,allowP:v,allowDT:y,fromChild:l,target:this.elDesc(s??void 0),host:this.elDesc(this.host.nativeElement),mode:this.mode()}),o.type){case"press":v&&(this.debug("rebroadcast emit: press"),this.press.emit(o));break;case"doubletap":y&&(this.debug("rebroadcast emit: doubletap"),this.doubletap.emit(o));break;case"swipeleft":m&&(this.debug("rebroadcast emit: swipeleft"),this.swipeleft.emit(o));break;case"swiperight":m&&(this.debug("rebroadcast emit: swiperight"),this.swiperight.emit(o));break;case"swipeup":h&&(this.debug("rebroadcast emit: swipeup"),this.swipeup.emit(o));break;case"swipedown":h&&(this.debug("rebroadcast emit: swipedown"),this.swipedown.emit(o));break}},t={passive:!0};a.addEventListener("press",e,t),a.addEventListener("doubletap",e,t),a.addEventListener("swipeleft",e,t),a.addEventListener("swiperight",e,t),a.addEventListener("swipeup",e,t),a.addEventListener("swipedown",e,t),a.addEventListener("contextmenu",this.onContextMenu,{passive:!1}),this.destroyRef.onDestroy(()=>{a.removeEventListener("pointerdown",this.onPointerDown,{capture:!0}),a.removeEventListener("pointermove",this.onPointerMove,{capture:!0}),a.removeEventListener("pointerrawupdate",this.onPointerRawUpdate,{capture:!0}),a.removeEventListener("pointerup",this.onPointerUp),a.removeEventListener("pointercancel",this.onPointerCancel,{capture:!0}),a.removeEventListener("lostpointercapture",this.onLostPointerCapture,{capture:!0}),a.removeEventListener("dblclick",this.onNativeDblClick),a.removeEventListener("press",e,t),a.removeEventListener("doubletap",e,t),a.removeEventListener("swipeleft",e,t),a.removeEventListener("swiperight",e,t),a.removeEventListener("swipeup",e,t),a.removeEventListener("swipedown",e,t),a.removeEventListener("contextmenu",this.onContextMenu),this.longPressTimer&&(window.clearTimeout(this.longPressTimer),this.longPressTimer=null),this.removeLongpressCancelListeners();try{if(this.pointerId!==null){let i=this.constructor._laneOwners,o=i.get(this.pointerId);o&&(this.debug("onDestroy: releasing lane ownership",{pointerId:this.pointerId,ownersBefore:o,ownedByThis:this.ownedLanes,instanceId:this._instanceId}),this.ownedLanes.h&&o.h===this._instanceId&&delete o.h,this.ownedLanes.v&&o.v===this._instanceId&&delete o.v,this.ownedLanes.p&&o.p===this._instanceId&&delete o.p,!o.h&&!o.v&&!o.p?i.delete(this.pointerId):i.set(this.pointerId,o),this.debug("onDestroy: lane owners after release",{pointerId:this.pointerId,owners:o}));let r=this.constructor._activePointers.delete(this.pointerId);this.debug("onDestroy: activePointers delete",{pointerId:this.pointerId,deleted:r})}}catch(i){}try{this.pointerId!==null&&this.captureEl&&"releasePointerCapture"in this.captureEl&&this.captureEl.releasePointerCapture(this.pointerId)}catch(i){}this.pointerId=null,this.captureEl=null,this.tracking=!1;try{n._instanceToEl.delete(this._instanceId)}catch(i){}})}onNativeDblClick=a=>{if(this.disableGestures()||!this.modeAllowsDoubleTap())return;let e=new CustomEvent("doubletap",{detail:{x:a.clientX,y:a.clientY,dt:0}});this.doubletap.emit(e),this.lastTapTime=0};onPointerDown=a=>{let e=this.constructor._activePointers,t=e.has(a.pointerId);t||e.add(a.pointerId);let i=this.constructor._multiPointerActive;if(i||e.size>1){!i&&e.size>1&&this.debug("multi-pointer detected; blocking gestures",{activeCount:e.size,pointerId:a.pointerId}),this.constructor._multiPointerActive=!0,this.tracking&&this.reset(!0);return}(this.tracking||this.pressFired||this.longPressTimer)&&(this.debug("pointerdown with stale state; force reset",{tracking:this.tracking,pressFired:this.pressFired,hasTimer:!!this.longPressTimer}),this.reset());let o=performance.now(),r=this.constructor._suppressAllGesturesUntil;if(o<r){this.debug("pointerdown suppressed by global window after longpress",{now:Math.round(o),suppressUntil:Math.round(r),remainingMs:Math.round(r-o)});return}if(this.disableGestures()||(this.debug("pointerdown",{x:a.clientX,y:a.clientY,pointerId:a.pointerId,pointerType:a.pointerType,sourceElement:a.target instanceof Element?a.target.outerHTML:String(a.target)}),this.pointerId!==null))return;let s=this.modeAllowsHorizontal(),l=this.modeAllowsVertical(),m=this.modeAllowsPress(),h=this.modeAllowsDoubleTap();{let E=a.target,N=this.host.nativeElement,U=E&&typeof E.closest=="function"?E.closest(".widget-container"):null;U&&U!==N&&(m=!1,h=!1);let j=N.classList?.contains("grid-stack")||N.tagName?.toLowerCase()==="gridstack",B=E&&typeof E.closest=="function"?E.closest(".grid-stack-item"):null;j&&B&&(m=!1,h=!1,this.debug("suppress grid-root press/doubletap for event inside grid-stack-item",{host:this.elDesc(N),target:this.elDesc(E??void 0),inGridItem:this.elDesc(B)}))}if(!s&&!l&&!m&&!h){this.debug("ignoring pointerdown: no gestures enabled for current mode");return}let v=m||h,y=this.constructor._laneOwners;!t&&y.has(a.pointerId)&&(this.debug("new pointer sequence; clearing stale lane owners",{pointerId:a.pointerId,prevOwners:y.get(a.pointerId)}),y.delete(a.pointerId));let C=y.get(a.pointerId)??{};if(C.p!==void 0){let E=C.p,N=this.constructor._instanceToEl.get(E),U=this.host.nativeElement,j=a.target??null,B=this.ownerRelationshipSummary(N??null,U,j);this.debug("pre-acquire owners (press lane already owned)",{owners:C,ownerId:E,ownerEl:this.elDesc(N),hostEl:this.elDesc(U),targetEl:this.elDesc(j),rel:B})}else this.debug("pre-acquire owners",{owners:C});if(this.ownedLanes={h:!1,v:!1,p:!1},s&&C.h===void 0&&(C.h=this._instanceId,this.ownedLanes.h=!0,this.debug("lane acquired",{lane:"horizontal",pointerId:a.pointerId,instanceId:this._instanceId,owners:C})),l&&C.v===void 0&&(C.v=this._instanceId,this.ownedLanes.v=!0,this.debug("lane acquired",{lane:"vertical",pointerId:a.pointerId,instanceId:this._instanceId,owners:C})),v&&C.p===void 0&&(C.p=this._instanceId,this.ownedLanes.p=!0,this.debug("lane acquired",{lane:"press",pointerId:a.pointerId,instanceId:this._instanceId,owners:C})),this.debug("lane acquisition",{allowH:s,allowV:l,allowPress:m,allowDT:h,wantP:v,acquired:this.ownedLanes,existingOwners:C}),!this.ownedLanes.h&&!this.ownedLanes.v&&!this.ownedLanes.p){if(v&&C.p!==void 0){let E=C.p,N=this.constructor._instanceToEl.get(E),U=this.host.nativeElement,j=a.target??null,B=this.ownerRelationshipSummary(N??null,U,j);this.debug("ignoring pointerdown: press lane not owned",{owners:C,ownerId:E,ownerEl:this.elDesc(N),hostEl:this.elDesc(U),targetEl:this.elDesc(j),rel:B})}else this.debug("ignoring pointerdown: other instance owns relevant lanes",{owners:C});return}switch(this.pointerId=a.pointerId,y.set(a.pointerId,C),this.tracking=!0,this.pressFired=!1,this.currentPointerType=a.pointerType||null,this.lockedAxis=null,this.captureEl=null,this.isDebugEnabled()&&(this.moveSamples=[{t:performance.now(),x:a.clientX,y:a.clientY,source:"move"}]),a.pointerType){case"touch":this._swipeMinDistance=this.isChromeOnMac?Math.min(25,this.swipeMinDistance()):this.swipeMinDistance(),this._swipeMaxDuration=this.isChromeOnMac?Math.max(850,this.swipeMaxDuration()):this.swipeMaxDuration(),this._longPressMs=this.longPressMs(),this._doubleTapInterval=this.doubleTapInterval(),this._tapSlop=this.tapSlop(),this._pressMoveSlop=Math.max(this.pressMoveSlop(),16);break;case"pen":this._swipeMinDistance=20,this._swipeMaxDuration=500,this._longPressMs=500,this._doubleTapInterval=250,this._tapSlop=10,this._pressMoveSlop=2;break;default:this._swipeMinDistance=15,this._swipeMaxDuration=400,this._longPressMs=500,this._doubleTapInterval=250,this._tapSlop=8,this._pressMoveSlop=2;break}this.debug("thresholds",{pointerType:a.pointerType,swipeMinDistance:this._swipeMinDistance,swipeMaxDuration:this._swipeMaxDuration,longPressMs:this._longPressMs,doubleTapInterval:this._doubleTapInterval,tapSlop:this._tapSlop,pressMoveSlop:this._pressMoveSlop,axisLockThreshold:this.axisLockThreshold});let _=performance.now()-this.lastTapUpTime,F=Math.hypot(a.clientX-this.lastTapUpX,a.clientY-this.lastTapUpY);if(this.potentialDoubleTap=h&&_<=this._doubleTapInterval&&F<=this._tapSlop,this.startX=a.clientX,this.startY=a.clientY,this.startTime=performance.now(),a.pointerType!=="mouse"){let N=a.target??null??this.host.nativeElement;try{"setPointerCapture"in N?(N.setPointerCapture(a.pointerId),this.captureEl=N,this.debug("setPointerCapture success",{pointerId:a.pointerId,pointerType:a.pointerType,captureElement:this.elDesc(N)})):(this.captureEl=null,this.debug("setPointerCapture unavailable on element"))}catch(U){this.captureEl=null,this.debug("setPointerCapture failed",{pointerId:a.pointerId,pointerType:a.pointerType})}}if(this.longPressTimer&&(this.debug("longpress timer cleared on pointerdown"),window.clearTimeout(this.longPressTimer)),!this.potentialDoubleTap&&m&&this.ownedLanes.p){if(this.currentPointerType!=="mouse")try{a.preventDefault()}catch(E){}this.addLongpressCancelListeners(),this.debug("longpress timer scheduled",{scheduleAt:Math.round(performance.now()),firesAt:Math.round(performance.now()+this._longPressMs),longPressMs:this._longPressMs,pressMoveSlop:this._pressMoveSlop,ownedLanes:this.ownedLanes,pointerType:this.currentPointerType}),this.longPressTimer=window.setTimeout(()=>{if(this.debug("longpress timer fired",{tracking:this.tracking,firedAt:Math.round(performance.now())}),this.constructor._multiPointerActive){this.debug("longpress cancelled: multi-pointer active"),this.reset(!0),this.longPressTimer=null,this.removeLongpressCancelListeners();return}if(!this.tracking){this.debug("longpress cancelled: not tracking");return}let E=a.clientX-this.startX,N=a.clientY-this.startY;if(Math.abs(E)<=this._pressMoveSlop&&Math.abs(N)<=this._pressMoveSlop){this.debug("longpress recognized",{x:this.startX,y:this.startY}),this.isFirefox&&this.currentPointerType!=="mouse"&&this.suppressNextClick(500),this.currentPointerType!=="mouse"&&(this.constructor._suppressAllGesturesUntil=performance.now()+600,this.debug("set global suppression window after longpress",{until:Math.round(this.constructor._suppressAllGesturesUntil)})),this.pressFired=!0;let U={x:this.startX,y:this.startY,center:{x:this.startX,y:this.startY}};this.emitPressEvent(U),this.reset()}this.longPressTimer=null,this.removeLongpressCancelListeners()},this._longPressMs)}else this.debug("longpress not scheduled",{potentialDoubleTap:this.potentialDoubleTap,allowPress:m,ownedPressLane:this.ownedLanes.p,reason:this.potentialDoubleTap?"awaiting doubletap":m?this.ownedLanes.p?"unknown":"press lane not owned":"press disabled by mode/flag",ownersForPointer:C})};onLostPointerCapture=a=>{if(a.pointerId===this.pointerId){if(this.currentPointerType!=="mouse"&&this.longPressTimer){this.debug("ignore lostpointercapture during active touch/pen long-press");return}this.onPointerCancel(a)}};suppressNextClick(a=500){this.debug("suppressNextClick (Firefox)",{timeoutMs:a});let e={capture:!0,passive:!1},t=["click","pointerup","mouseup","mousedown","auxclick","touchend","touchstart","contextmenu"],i=s=>{this.debug("suppress ghost event",s.type),s.preventDefault(),s.stopPropagation();let l=s;typeof l.stopImmediatePropagation=="function"&&l.stopImmediatePropagation()},o=()=>{t.forEach(s=>document.removeEventListener(s,i,e)),window.clearTimeout(r)};t.forEach(s=>document.addEventListener(s,i,e));let r=window.setTimeout(o,a)}onPointerMove=a=>this.handlePointerMotion(a,"move");onPointerRawUpdate=a=>this.handlePointerMotion(a,"raw");handlePointerMotion(a,e){if(!(!this.tracking||a.pointerId!==this.pointerId)){if(this.constructor._multiPointerActive){this.debug("multi-pointer block active; cancelling motion",{pointerId:a.pointerId,source:e}),this.reset(!0);return}if(!this.pressFired){if(this.recordMove(a,e),this.longPressTimer){let t=Math.abs(a.clientX-this.startX),i=Math.abs(a.clientY-this.startY);(t>this._pressMoveSlop||i>this._pressMoveSlop)&&(this.debug(`longpress cancelled by pointer${e==="raw"?"rawupdate":"move"}: moved beyond slop`,{dx:t,dy:i,slop:this._pressMoveSlop}),window.clearTimeout(this.longPressTimer),this.longPressTimer=null,this.removeLongpressCancelListeners())}if(!this.lockedAxis){let t=a.clientX-this.startX,i=a.clientY-this.startY,o=Math.abs(t),r=Math.abs(i);(o>=this.axisLockThreshold||r>=this.axisLockThreshold)&&(this.lockedAxis=o>=r?"x":"y",this.debug(`axis locked${e==="raw"?" (raw)":""}`,{axis:this.lockedAxis,dx:t,dy:i}))}}}}onPointerUp=a=>{if(this.debug("pointerup",{x:a.clientX,y:a.clientY,pointerId:a.pointerId}),!this.tracking||a.pointerId!==this.pointerId){this.cleanupActivePointer(a.pointerId);return}this.finishGesture(a,!1)};onPointerCancel=a=>{let e=this.host.nativeElement;if(this.debug("pointercancel",{pointerId:a.pointerId,pointerType:a.pointerType,event:a,documentActiveElement:document.activeElement,elementIsConnected:e.isConnected,elementVisibility:e.offsetParent!==null,hasPointerCapture:typeof e.hasPointerCapture=="function"?e.hasPointerCapture(a.pointerId):void 0,documentHidden:document.hidden}),!this.tracking||a.pointerId!==this.pointerId){this.cleanupActivePointer(a.pointerId);return}this.finishGesture(a,!0)};finishGesture(a,e){if(this.debug("finishGesture begin",{cancelled:e,hasTimer:!!this.longPressTimer,pressFired:this.pressFired,ownedLanes:this.ownedLanes}),this.cleanupActivePointer(a.pointerId),this.constructor._multiPointerActive){this.debug("multi-pointer block active; ignoring finishGesture",{pointerId:a.pointerId}),this.reset(!0);return}let t=performance.now(),i=t-this.startTime,o=a.clientX-this.startX,r=a.clientY-this.startY,s=Math.abs(o),l=Math.abs(r);if(this.longPressTimer&&(this.debug(`longpress cancelled by ${e?"pointercancel":"pointerup"}`,{durationMs:Math.round(i),absDx:s,absDy:l,pressMoveSlop:this._pressMoveSlop}),window.clearTimeout(this.longPressTimer),this.longPressTimer=null,this.removeLongpressCancelListeners()),this.pressFired){this.debug(`${e?"pointercancel":"pointerup"} after longpress: resetting gesture state`),this.reset();return}if(i<=this._swipeMaxDuration){let h=this.modeAllowsHorizontal(),v=this.modeAllowsVertical(),y=h&&this.ownedLanes.h&&(this.lockedAxis==="x"&&s>=this._swipeMinDistance||!this.lockedAxis&&s>=this._swipeMinDistance&&s>=l),C=v&&this.ownedLanes.v&&(this.lockedAxis==="y"&&l>=this._swipeMinDistance||!this.lockedAxis&&l>=this._swipeMinDistance&&l>s);if(this.debug("swipe gating",{allowH:h,allowV:v,owned:this.ownedLanes,lockedAxis:this.lockedAxis,horizontalOk:y,verticalOk:C}),y){this.debugSwipeDecision({phase:"recognized",axis:"x",dx:o,dy:r,absDx:s,absDy:l,duration:i,reason:e?"horizontal swipe (on cancel)":"horizontal swipe"}),this.debug("swipe detected",{direction:o>0?"right":"left",dx:o,dy:r,duration:i}),o>0?this.emitSwipeEvent("swiperight",{dx:o,dy:r,duration:i}):this.emitSwipeEvent("swipeleft",{dx:o,dy:r,duration:i}),this.reset();return}else if(C){this.debugSwipeDecision({phase:"recognized",axis:"y",dx:o,dy:r,absDx:s,absDy:l,duration:i,reason:e?"vertical swipe (on cancel)":"vertical swipe"}),this.debug("swipe detected",{direction:r>0?"down":"up",dx:o,dy:r,duration:i}),r>0?this.emitSwipeEvent("swipedown",{dx:o,dy:r,duration:i}):this.emitSwipeEvent("swipeup",{dx:o,dy:r,duration:i}),this.reset();return}if(!e){let S=this.lockedAxis??(s>=l?"x":"y"),_=S==="x"?s:l,F=[];_<this._swipeMinDistance&&F.push(`distance ${Math.round(_)}px < min ${this._swipeMinDistance}px`),!this.lockedAxis&&(S==="x"&&l>s||S==="y"&&s>l)&&F.push("orthogonal movement dominated"),this.debugSwipeDecision({phase:"rejected",axis:S,dx:o,dy:r,absDx:s,absDy:l,duration:i,reason:F.join("; ")||"fell through conditions"})}}else e||this.debugSwipeDecision({phase:"rejected",axis:this.lockedAxis??(s>=l?"x":"y"),dx:o,dy:r,absDx:s,absDy:l,duration:i,reason:`duration ${Math.round(i)}ms exceeds max ${this._swipeMaxDuration}ms`});if(!e&&this.ownedLanes.p&&this.modeAllowsDoubleTap()&&this.currentPointerType!=="mouse"&&s<=this._tapSlop&&l<=this._tapSlop&&i<this._longPressMs){let h=t,v=h-this.lastTapTime,y=Math.hypot(a.clientX-this.lastTapX,a.clientY-this.lastTapY);v<=this._doubleTapInterval&&y<=this._tapSlop?(this.emitDoubleTapEvent({x:a.clientX,y:a.clientY,dt:v}),this.lastTapTime=0,this.potentialDoubleTap=!1):(this.lastTapTime=h,this.lastTapX=a.clientX,this.lastTapY=a.clientY)}!e&&!this.pressFired&&s<=this._tapSlop&&l<=this._tapSlop&&i<this._longPressMs?(this.lastTapUpTime=t,this.lastTapUpX=a.clientX,this.lastTapUpY=a.clientY):this.potentialDoubleTap=!1,this.reset()}addLongpressCancelListeners(){this.debug("addLongpressCancelListeners");let a=r=>{this.debug("longpress cancelled by event",r?.type),this.longPressTimer&&(window.clearTimeout(this.longPressTimer),this.longPressTimer=null),this.removeLongpressCancelListeners()},e=this.host.nativeElement,t=document,i={capture:!0},o=[{type:"pointercancel",handler:a,opts:i,targets:["el","doc"]}];this.currentPointerType!=="mouse"&&o.push({type:"blur",handler:a,opts:i,targets:["window"]}),this.cancelLongpressHandlers=o;for(let r of this.cancelLongpressHandlers){let{type:s,handler:l,opts:m,targets:h}=r;h&&h.includes("el")&&e.addEventListener(s,l,m),h&&h.includes("doc")&&t.addEventListener(s,l,m),h&&h.includes("window")&&window.addEventListener(s,l,m)}}removeLongpressCancelListeners(){this.debug("removeLongpressCancelListeners");let a=this.host.nativeElement,e=document;for(let t of this.cancelLongpressHandlers){let{type:i,handler:o,opts:r,targets:s}=t;s&&s.includes("el")&&a.removeEventListener(i,o,r),s&&s.includes("doc")&&e.removeEventListener(i,o,r),s&&s.includes("window")&&window.removeEventListener(i,o,r)}this.cancelLongpressHandlers=[]}reset(a=!1){this.debug("reset gesture state"),this.longPressTimer&&(window.clearTimeout(this.longPressTimer),this.longPressTimer=null);try{this.pointerId!==null&&this.captureEl&&"releasePointerCapture"in this.captureEl&&this.captureEl.releasePointerCapture(this.pointerId)}catch(e){}try{if(this.pointerId!==null){let e=this.constructor._laneOwners,t=e.get(this.pointerId);t&&(this.debug("releasing lane ownership",{pointerId:this.pointerId,ownersBefore:t,ownedByThis:this.ownedLanes,instanceId:this._instanceId}),this.ownedLanes.h&&t.h===this._instanceId&&delete t.h,this.ownedLanes.v&&t.v===this._instanceId&&delete t.v,this.ownedLanes.p&&t.p===this._instanceId&&delete t.p,!t.h&&!t.v&&!t.p?e.delete(this.pointerId):e.set(this.pointerId,t),this.debug("lane owners after release",{pointerId:this.pointerId,owners:t}))}}catch(e){}this.pointerId!==null&&!a&&this.cleanupActivePointer(this.pointerId),this.pointerId=null,this.captureEl=null,this.tracking=!1,this.pressFired=!1,this.currentPointerType=null,this.lockedAxis=null,this.ownedLanes={h:!1,v:!1,p:!1},this.removeLongpressCancelListeners()}isDebugEnabled(){try{return this.constructor.DEBUG}catch(a){return this.constructor.DEBUG}}recordMove(a,e){this.isDebugEnabled()&&(this.moveSamples.push({t:performance.now(),x:a.clientX,y:a.clientY,source:e}),this.moveSamples.length>this.constructor.MOVES_BUFFER_SIZE&&this.moveSamples.shift())}debugSwipeDecision(a){if(!this.isDebugEnabled())return;let e=this.moveSamples,t=e[e.length-1],i;if(e.length>=2){let o=t?.t??performance.now(),r=100,s=e.length-2;for(;s>=0&&o-e[s].t<r;)s--;s=Math.max(0,s);let l=e[s],m=Math.max(1,(t?.t??o)-l.t),h=(t?.x??0)-l.x,v=(t?.y??0)-l.y;i=(a.axis==="x"?Math.abs(h):Math.abs(v))/m}this.debug("swipe decision",{phase:a.phase,axis:a.axis,dx:a.dx,dy:a.dy,absDx:a.absDx,absDy:a.absDy,durationMs:Math.round(a.duration),velocityAvgPxPerMs:a.velocity??(a.axis==="x"?a.absDx:a.absDy)/Math.max(1,a.duration),recentVelocity100msPxPerMs:i,minDistance:this._swipeMinDistance,maxDuration:this._swipeMaxDuration,lockedAxis:this.lockedAxis,reason:a.reason,samplesCount:e.length,firstSample:e[0],lastSample:e[e.length-1]})}debug(...a){this.isDebugEnabled()&&console.debug(`[GestureDirective][#${this._instanceId}]`,...a)}cleanupActivePointer(a){try{let e=this.constructor._activePointers;e.delete(a)&&this.debug("activePointers delete",{pointerId:a,activeCount:e.size}),this.constructor._multiPointerActive&&e.size===0&&(this.constructor._multiPointerActive=!1,this.debug("multi-pointer block lifted",{activeCount:e.size}))}catch(e){}}emitSwipeEvent(a,e){e.__gid=this._instanceId;let t=new CustomEvent(a,{detail:e,bubbles:!0,composed:!0});try{this.host.nativeElement.dispatchEvent(t)}catch(i){}if(this.debug("emitSwipeEvent",{name:a,detail:e}),this.bridgeUiEvents()&&(a==="swipeleft"||a==="swiperight"))try{let i=a==="swipeleft"?"openLeftSidenav":"openRightSidenav";document.dispatchEvent(new CustomEvent(i,{detail:e}))}catch(i){}switch(a){case"swipeleft":this.swipeleft.emit(t);break;case"swiperight":this.swiperight.emit(t);break;case"swipeup":this.swipeup.emit(t);break;case"swipedown":this.swipedown.emit(t);break}}emitPressEvent(a){let e=performance.now();if(e-this._lastPressEmitTs<80){this.debug("press emit suppressed by cooldown");return}this._lastPressEmitTs=e,a.__gid=this._instanceId;let t=new CustomEvent("press",{detail:a,bubbles:!0,composed:!0});try{this.host.nativeElement.dispatchEvent(t)}catch(i){}this.debug("emitPressEvent",{detail:a}),this.press.emit(t)}emitDoubleTapEvent(a){a.__gid=this._instanceId;let e=new CustomEvent("doubletap",{detail:a,bubbles:!0,composed:!0});try{this.host.nativeElement.dispatchEvent(e)}catch(t){}this.doubletap.emit(e)}modeAllowsHorizontal(){let a=this.mode();return this.disableGestures()?!1:a==="all"||a==="horizontal"}modeAllowsVertical(){let a=this.mode();return this.disableGestures()?!1:a==="all"||a==="dashboard"}modeAllowsPress(){let a=this.mode();return this.disableGestures()?!1:(a==="all"||a==="dashboard"||a==="press"||a==="editor")&&this.enablePress()}modeAllowsDoubleTap(){let a=this.mode();return this.disableGestures()?!1:(a==="all"||a==="dashboard"||a==="press"||a==="editor")&&this.enableDoubleTap()}elDesc(a){if(!a)return null;try{let e=a,t=a.tagName?.toLowerCase?.()??"node",i=e.id?`#${e.id}`:"",o=e.className&&typeof e.className=="string"?e.className:"",r=o?"."+o.split(/\s+/).filter(Boolean).slice(0,4).join("."):"";return`${t}${i}${r}`}catch(e){return"node"}}ownerRelationshipSummary(a,e,t){try{return{owner:this.elDesc(a),host:this.elDesc(e),target:this.elDesc(t),ownerIsConnected:a?a.isConnected:null,hostIsConnected:e.isConnected,targetIsConnected:t?t.isConnected:null,targetInOwner:a&&t?a.contains(t):null,targetInHost:t?e.contains(t):null,ownerInHost:a?e.contains(a):null,hostInOwner:a?a.contains(e):null}}catch(i){return{}}}static \u0275fac=function(e){return new(e||n)};static \u0275dir=Gt({type:n,selectors:[["","kipGestures",""]],inputs:{swipeMinDistance:[1,"swipeMinDistance"],swipeMaxDuration:[1,"swipeMaxDuration"],longPressMs:[1,"longPressMs"],doubleTapInterval:[1,"doubleTapInterval"],tapSlop:[1,"tapSlop"],pressMoveSlop:[1,"pressMoveSlop"],mode:[1,"mode"],disableGestures:[1,"disableGestures"],enablePress:[1,"enablePress"],enableDoubleTap:[1,"enableDoubleTap"],bridgeUiEvents:[1,"bridgeUiEvents"]},outputs:{swipeleft:"swipeleft",swiperight:"swiperight",swipeup:"swipeup",swipedown:"swipedown",press:"press",doubletap:"doubletap"}})};(()=>{try{(typeof localStorage<"u"?localStorage.getItem("kip:gesturesDebug"):null)==="1"&&(ws.DEBUG=!0);let a=window;a.kipGesturesDebug=e=>{let t=ws;typeof e=="boolean"?t.DEBUG=e:t.DEBUG=!t.DEBUG;try{localStorage.setItem("kip:gesturesDebug",t.DEBUG?"1":"0")}catch(i){}return console.info("KIP gestures debug:",t.DEBUG),t.DEBUG}}catch(n){}})();var So=(()=>{class n{dataset=A(Cn);syncDataChartDataset(e,t,i){let o=typeof t?.datachartPath=="string"?t.datachartPath.trim():"";if(!o)return;let r=typeof t?.datachartSource=="string"&&t.datachartSource.trim().length>0?t.datachartSource.trim():"default",s=t?.timeScale,l=Number(t?.period??0),m=i??"";this.upsertDataset({uuid:e,path:o,source:r,timeScale:s,period:l,label:m,serialize:!0,editable:!1})}syncNumericMiniChartDataset(e,t,i){let o=typeof t=="string"?t.trim():"";if(!o)return;let r=typeof i=="string"&&i.trim().length>0?i.trim():"default";this.upsertDataset({uuid:e,path:o,source:r,timeScale:"minute",period:.2,label:`simple-chart-${e}`,serialize:!1,editable:!1})}syncWindTrendsDatasets(e,t){!t||String(t).trim().length===0||(this.upsertDataset({uuid:`${e}-twd`,path:"self.environment.wind.directionTrue",source:"default",timeScale:t,period:30,label:`windtrends-${e}`,serialize:!0,editable:!1}),this.upsertDataset({uuid:`${e}-tws`,path:"self.environment.wind.speedTrue",source:"default",timeScale:t,period:30,label:`speedtrends-${e}`,serialize:!0,editable:!1}))}removeDatasetIfExists(e,t=!1){this.dataset.removeIfExists(e,t)}removeOwnedDatasets(e,t=!0){let i=typeof e=="string"?e.trim():"";if(!i)return;this.dataset.list().filter(s=>s.uuid===i||s.uuid?.startsWith(`${i}-`)).forEach(s=>{this.dataset.removeIfExists(s.uuid,t)})}upsertDataset(e){let t=this.dataset.getDatasetConfig(e.uuid);if(!t){this.dataset.create(e.path,e.source,e.timeScale,e.period,e.label,e.serialize,e.editable,e.uuid);return}if(!(t.path!==e.path||t.pathSource!==e.source||t.timeScaleFormat!==e.timeScale||t.period!==e.period||t.label!==e.label))return;let o=ge(Z({},t),{path:e.path,pathSource:e.source,timeScaleFormat:e.timeScale,period:e.period,label:e.label,editable:e.editable});this.dataset.edit(o,e.serialize)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var lm=(()=>{class n{_storage=A(yu);_settings=A(Ht);upgrading=w(!1);error=w(null);messages=w([]);legacyFileVersion=9;legacyConfigVersion=10;targetConfigVersion=12;static widgetTypeToSelectorMap={WidgetNumeric:"widget-numeric",WidgetTextGeneric:"widget-text",WidgetDateGeneric:"widget-datetime",WidgetBooleanSwitch:"widget-boolean-switch",WidgetBlank:"widget-blank",WidgetStateComponent:"widget-button",WidgetSimpleLinearComponent:"widget-simple-linear",WidgetGaugeNgLinearComponent:"widget-gauge-ng-linear",WidgetGaugeNgRadialComponent:"widget-gauge-ng-radial",WidgetGaugeNgCompassComponent:"widget-gauge-ng-compass",WidgetGaugeComponent:"widget-gauge-steel",WidgetWindComponent:"widget-wind-steer",WidgetFreeboardskComponent:"widget-freeboardsk",WidgetAutopilotComponent:"widget-autopilot",WidgetDataChart:"widget-data-chart",WidgetRaceTimerComponent:"widget-racetimer",WidgetIframeComponent:"widget-iframe",WidgetTutorial:"widget-tutorial"};runUpgrade(e){return Le(this,null,function*(){if(this.error.set(null),this.upgrading.set(!0),this.messages.set([]),e===void 0)try{let t=yield this._storage.listConfigs(this.legacyFileVersion);for(let i of t){let o=yield this.transformConfig(i);if(o)try{yield this._storage.setConfig(o.scope,o.name,o.newConfiguration),yield this._storage.setConfig(o.scope,o.name,o.oldConfiguration,this.legacyFileVersion),this.pushMsg(`[Upgrade] Configuration ${o.scope}/${o.name} upgraded to version ${this.targetConfigVersion}. Old configuration patched to version 0.`)}catch(r){this.pushError(`[Upgrade] Error saving configuration for ${i.name}: ${r.message}`)}}setTimeout(()=>this._settings.reloadApp(),1500)}catch(t){this.pushError("Error fetching configuration data: "+t.message)}else if(e===11&&this._settings.useSharedConfig)try{let t=yield this._storage.listConfigs(11);for(let i of t)try{let o=yield this._storage.getConfig(i.scope,i.name,11),r=Yt(o);this.pushMsg(`[Upgrade] Saving configuration backup to file ${i.scope}/${i.name}...`),yield this._storage.setConfig(i.scope,i.name,r,11.99),this.pushMsg(`[Upgrade] ${i.scope}/${i.name} -> v${this.targetConfigVersion}.`);let s=this.upgradeConfig(o);if(!s)continue;this.pushMsg("[Upgrade] Saving upgraded configurations..."),yield this._storage.setConfig(i.scope,i.name,s)}catch(o){this.pushError(`[Upgrade] Error upgrading ${i.scope}/${i.name}: ${o.message}`)}this.pushMsg("[Upgrade] Reloading app to finalize upgrade..."),setTimeout(()=>this._settings.reloadApp(),1500)}catch(t){this.pushError("Error fetching configuration data. Aborting upgrade. Details: "+t.message)}else if(e===11&&!this._settings.useSharedConfig){let t={app:null,dashboards:null,theme:null};t.app=this._settings.getAppConfig(),t.dashboards=this._settings.getDashboardConfig(),t.theme=this._settings.getThemeConfig(),t.app.configVersion=this.targetConfigVersion,this.addSplitShellConfigKeys(t.app);let i=this.extractAppDatasets(t.app);this.upgradeDashboardWidgets(t.dashboards),this.migrateDatasetsToDataCharts(i,t.dashboards),this.migrateUseNeedleToEnableNeedle(t.dashboards),localStorage.setItem("appConfig",JSON.stringify(t.app)),localStorage.setItem("dashboardsConfig",JSON.stringify(t.dashboards)),localStorage.setItem("themeConfig",JSON.stringify(t.theme)),setTimeout(()=>this._settings.reloadApp(),1500),this.upgrading.set(!1)}else{let t={app:null,widget:null,layout:null,theme:null};t.app=this._settings.loadConfigFromLocalStorage("appConfig"),t.widget=this._settings.loadConfigFromLocalStorage("widgetConfig"),t.layout=this._settings.loadConfigFromLocalStorage("layoutConfig"),t.theme=this._settings.loadConfigFromLocalStorage("themeConfig");let i=this.transformApp(t.app),o=this.extractAppDatasets(i),r=this.transformTheme(t.theme),s=t.layout?.rootSplits||[],l=t.layout?.splitSets||[],m=t.widget?.widgets||[],h=s.map((v,y)=>{let C=this.extractWidgetsFromSplitSets(l,m,v);return{id:v,name:`Dashboard ${y+1}`,configuration:C}});this.migrateDatasetsToDataCharts(o,h),this.migrateUseNeedleToEnableNeedle(h),localStorage.setItem("appConfig",JSON.stringify(i)),localStorage.setItem("dashboardsConfig",JSON.stringify(h)),localStorage.setItem("themeConfig",JSON.stringify(r)),setTimeout(()=>this._settings.reloadApp(),1500),this.upgrading.set(!1)}})}startFresh(){if(this.error.set(null),this.upgrading.set(!0),this._storage.initConfig===null)this._storage.listConfigs(this.legacyFileVersion).then(e=>Le(this,null,function*(){for(let t of e){let i=yield this._storage.getConfig(t.scope,t.name,this.legacyFileVersion);if(i.app.configVersion=0,t.scope==="global")try{setTimeout(()=>{this._storage.patchGlobal(t.name,t.scope,i,"replace",this.legacyFileVersion),this.pushMsg(`[Retired] Configuration ${t.scope}/${t.name} patched to version 0.`)},750)}catch(o){this.pushError(`[Upgrade] Error saving configuration for ${t.name}.`)}else try{yield this._storage.setConfig(t.scope,t.name,i,this.legacyFileVersion),this.pushMsg(`[Retired] Configuration ${t.scope}/${t.name} patched to version 0.`)}catch(o){this.pushError(`[Upgrade] Error saving configuration for ${t.name}.`)}}})).catch(e=>this.pushError("Error fetching configuration data: "+e.message)).finally(()=>{this.upgrading.set(!1),this._settings.resetSettings()});else{let e={app:null,dashboards:null,theme:null};e.app=this._settings.loadConfigFromLocalStorage("appConfig"),e.theme=this._settings.loadConfigFromLocalStorage("themeConfig"),e.app.configVersion=this.targetConfigVersion,e.app.nightModeBrightness=.27,e.theme.themeName="",localStorage.setItem("appConfig",JSON.stringify(e.app)),localStorage.setItem("themeConfig",JSON.stringify(e.theme)),localStorage.removeItem("widgetConfig"),localStorage.removeItem("layoutConfig"),this.upgrading.set(!1)}}transformConfig(e){return Le(this,null,function*(){let t=yield this._storage.getConfig(e.scope,e.name,this.legacyFileVersion);if(t.app.configVersion!==this.legacyConfigVersion)return this.pushError(`[Upgrade Service] ${e.scope}/${e.name} is not an upgradable version ${this.legacyConfigVersion} config. Skipping.`),null;let i=this.transformApp(t.app),o=this.extractAppDatasets(i),r=this.transformTheme(t.theme),s=t.layout?.rootSplits||[],l=t.layout?.splitSets||[],m=t.widget?.widgets||[],h=s.map((y,C)=>{let S=this.extractWidgetsFromSplitSets(l,m,y);return{id:y,name:`Dashboard ${C+1}`,configuration:S}});this.migrateDatasetsToDataCharts(o,h),this.migrateUseNeedleToEnableNeedle(h);let v=Yt(t);return v.app.configVersion=0,{scope:e.scope,name:e.name,newConfiguration:{app:i,theme:r,dashboards:h},oldConfiguration:v}})}extractAppDatasets(e){if(!e||!Array.isArray(e.dataSets))return[];let t=0,i=[],o=[];e.dataSets.forEach((r,s)=>{(r.editable===!0||r.editable===void 0)&&(o.push({period:r.period,datachartPath:r.path,datachartSource:r.pathSource,timeScale:r.timeScaleFormat,datasetUUID:r.uuid}),i.push(s),t++)});for(let r=i.length-1;r>=0;r--)e.dataSets.splice(i[r],1);return t&&this.pushMsg(`[Upgrade] Retired ${t} Dataset(s).`),o}migrateDatasetsToDataCharts(e,t){!Array.isArray(e)||e.length===0||Array.isArray(t)&&t.forEach(i=>{let o=0;i&&Array.isArray(i.configuration)&&(i.configuration.forEach(r=>{if(r&&typeof r=="object"&&r.input?.widgetProperties?.config){let s=e.find(l=>l.datasetUUID===r.input?.widgetProperties?.config.datasetUUID);s&&(Object.entries(s).forEach(([l,m])=>{l!=="datasetUUID"&&(r.input.widgetProperties.config[l]=m)}),delete r.input.widgetProperties.config?.datasetUUID,delete r.input.widgetProperties.config?.timeScaleFormat,o++)}}),o&&this.pushMsg(`[Upgrade] Migrated ${o} Realtime Data Chart widget(s).`))})}transformWidget(e,t){if(e.color==="white"&&(e.color="contrast"),e.textColor){switch(e.textColor){case"text":e.color="contrast";break;case"primary":e.color="blue";break;case"accent":e.color="yellow";break;case"warn":e.color="purple";break;case"nobar":t==="WidgetGaugeNgLinearComponent"&&(e.color="blue",e.gauge=e.gauge||{},e.gauge.useNeedle=!1);break;default:e.color=e.textColor}delete e.textColor}return e}transformApp(e){if(!e)return null;let t=Yt(e);return t.configVersion=this.targetConfigVersion,t.nightModeBrightness=.27,t.splitShellEnabled=!1,t.splitShellSide="left",t.splitShellWidth=.2,t.splitShellSwipeDisabled=!1,t}transformTheme(e){return e?{themeName:""}:null}upgradeConfig(e){try{if(e.app.configVersion!==11)return this.pushError(`[Upgrade Service] Config version ${e.app.configVersion} upgrade is not supported. Skipping...`),null;this.addSplitShellConfigKeys(e.app);let t=this.extractAppDatasets(e.app);this.migrateDatasetsToDataCharts(t,e.dashboards),this.migrateUseNeedleToEnableNeedle(e.dashboards);let i=0,o=0;if(Array.isArray(e.dashboards)){for(let r of e.dashboards)if(r&&Array.isArray(r.configuration)){for(let s of r.configuration)if(s&&typeof s=="object"){s.selector!=="widget-host2"&&(s.selector="widget-host2",i++);let l=m=>{let h=s[m],v=typeof h=="string"?Number(h):h;Number.isFinite(v)&&v!==0&&(s[m]=v*2,o++)};if(l("w"),l("h"),l("x"),l("y"),s.w===void 0||s.w===null){let m=s.minW,h=m||2;s.w=h,o++}if(s.h===void 0||s.h===null){let m=s.minH,h=m||2;s.h=h,o++}}}}return i&&this.pushMsg(`[Upgrade] Updated ${i} widget selector(s) to 'widget-host2'.`),o&&this.pushMsg(`[Upgrade] Doubled widget grid metrics for ${o} non-zero (w/h/x/y) entries.`),e.app.configVersion=12,{app:e.app,theme:e.theme,dashboards:e.dashboards}}catch(t){return this.pushError(`[Upgrade Service] Error upgrading ${e.app.configVersion}: ${t.message}`),null}}migrateUseNeedleToEnableNeedle(e){if(!Array.isArray(e))return;let t=0;for(let i of e)if(!(!i||!Array.isArray(i.configuration)))for(let o of i.configuration){let l=o.input?.widgetProperties?.config?.gauge;!l||typeof l!="object"||Object.prototype.hasOwnProperty.call(l,"useNeedle")&&(l.enableNeedle===void 0?l.enableNeedle=!!l.useNeedle:l.enableNeedle=!!l.enableNeedle,delete l.useNeedle,t++)}t&&this.pushMsg(`[Upgrade] Renamed gauge.useNeedle -> gauge.enableNeedle on ${t} widget(s).`)}addSplitShellConfigKeys(e){e&&(e.splitShellEnabled===void 0&&(e.splitShellEnabled=!1),e.splitShellSide===void 0&&(e.splitShellSide="left"),e.splitShellWidth===void 0&&(e.splitShellWidth=.2),e.splitShellSwipeDisabled===void 0&&(e.splitShellSwipeDisabled=!1))}upgradeDashboardWidgets(e){let t=0,i=0;if(Array.isArray(e)){for(let o of e)if(!(!o||!Array.isArray(o.configuration)))for(let r of o.configuration){if(!r||typeof r!="object")continue;r.selector!=="widget-host2"&&(r.selector="widget-host2",t++);let s=l=>{let m=r[l],h=typeof m=="string"?Number(m):m;Number.isFinite(h)&&h!==0&&(r[l]=h*2,i++)};if(s("w"),s("h"),s("x"),s("y"),r.w===void 0||r.w===null){let l=r.minW,m=typeof l=="string"?Number(l):l,h=Number.isFinite(m)&&m>0?m:2;r.w=h*2,i++}if(r.h===void 0||r.h===null){let l=r.minH,m=typeof l=="string"?Number(l):l,h=Number.isFinite(m)&&m>0?m:2;r.h=h*2,i++}}}t&&this.pushMsg(`[Upgrade] Updated ${t} localStorage widget selector(s) to 'widget-host2'.`),i&&this.pushMsg(`[Upgrade] Doubled grid metrics for ${i} non-zero (w/h/x/y) entries.`)}extractWidgetsFromSplitSets(e,t,i){let o=new Map(t.map(_=>[_.uuid,_])),r=[],s=[],l=0,m=0,h=24,v=24,y=3,C=3,S=_=>{let F=e.find(E=>E.uuid===_);if(!F){s.push(`Missing splitSet with UUID: ${_}`);return}F.splitAreas.forEach(E=>{if(E.type==="widget"){let N=o.get(E.uuid);if(N){if(N.type==="WidgetBlank")return;if(m+C>v){s.push(`No space left for widget: ${N.uuid}`);return}let U=n.widgetTypeToSelectorMap[N.type]||"widget-unknown",j=this.transformWidget(N.config,N.type);r.push({id:N.uuid,selector:"widget-host2",input:{widgetProperties:{type:U,uuid:N.uuid,config:j}},x:l,y:m,w:y,h:C}),l+=y,l>=h&&(l=0,m+=C)}else s.push(`Missing widget with UUID: ${E.uuid}`)}else E.type==="splitSet"&&S(E.uuid)})};return S(i),s.length&&this.pushMsg("Transformation Issues: "+s.join("; ")),r}pushMsg(e){this.messages.update(t=>[...t,e])}pushError(e){this.error.set(e),this.pushMsg(e)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function y0(n,a){if(n&1&&O(0,"img",3),n&2){let e=T();ie("src",e.data.iconHref,Kr)}}function A0(n,a){n&1&&Jr(0)}var Kl=(()=>{class n{data=A(pi);static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["dialog-frame"]],decls:10,vars:4,consts:[[1,"dialogue-header"],[1,"dialog-title"],["mat-dialog-title",""],["alt","","aria-hidden","true",1,"dialog-title-icon"],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],[1,"dialog-content-padding"],[4,"ngComponentOutlet"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1)(2,"h5",2),I(3,y0,1,1,"img",3),c(4),u()(),d(5,"button",4)(6,"mat-icon"),c(7,"close"),u()()(),d(8,"mat-dialog-content",5),Ai(9,A0,1,0,"ng-container",6),u()),t&2&&(f(3),P(i.data.iconHref?3:-1),f(),be(" ",i.data.title),f(),R("mat-dialog-close",!1),f(4),R("ngComponentOutlet",i.data.componentType))},dependencies:[je,Qt,Pi,Ri,Ni,et,_t,zc],styles:[".dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center}.dialog-title[_ngcontent-%COMP%]{display:flex;align-items:center}.dialog-title-icon[_ngcontent-%COMP%]{position:relative;top:12px;width:42px;height:42px;object-fit:contain}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}.mat-mdc-dialog-content[_ngcontent-%COMP%]{max-height:max-content}"]})}return n})();function C0(n,a){if(n&1&&(d(0,"button",4),c(1),u()),n&2){let e=T();R("mat-dialog-close",!0),f(),Q(e.data.confirmBtnText)}}var dm=(()=>{class n{data=A(pi);static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["dialog-confirmation"]],decls:12,vars:6,consts:[[1,"dialogue-header"],["mat-dialog-title",""],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],["align","end"],["mat-flat-button","",3,"mat-dialog-close"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"h5",1),c(2),u(),d(3,"button",2)(4,"mat-icon"),c(5,"close"),u()()(),d(6,"mat-dialog-content"),c(7),u(),d(8,"mat-dialog-actions",3)(9,"button",4),c(10),u(),I(11,C0,2,2,"button",4),u()),t&2&&(f(2),Q(i.data.title),f(),R("mat-dialog-close",!1),f(4),be(" ",i.data.message,`
41
+ `),f(2),R("mat-dialog-close",!1),f(),Q(i.data.cancelBtnText),f(),P(i.data.confirmBtnText?11:-1))},dependencies:[je,Qt,Pi,Ri,Kn,Ni,et,vt,_t],styles:[".dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}.mat-mdc-dialog-content[_ngcontent-%COMP%]{max-height:max-content}"]})}return n})();function x0(n,a){if(n&1&&(d(0,"button",9),c(1),u()),n&2){let e=T(),t=Lt(1);R("disabled",!t.valid),f(),Q(e.data.confirmBtnText)}}var cm=(()=>{class n{dialogRef=A(fn);data=A(pi);saveName(){this.dialogRef.close(this.data)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["dialog-name"]],decls:19,vars:6,consts:[["name","ngForm"],["name","name",3,"ngSubmit"],[1,"dialogue-header"],["mat-dialog-title",""],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],[1,"field-margin"],["matInput","","type","text","id","name","placeholder","Name","name","name","required","","cdkFocusInitial","",3,"ngModelChange","ngModel"],["align","end"],["mat-flat-button","",3,"mat-dialog-close"],["mat-flat-button","","type","submit",3,"disabled"]],template:function(t,i){if(t&1){let o=we();d(0,"form",1,0),$("ngSubmit",function(){return i.saveName()}),d(2,"div",2)(3,"h5",3),c(4),u(),d(5,"button",4)(6,"mat-icon"),c(7,"close"),u()()(),d(8,"mat-dialog-content")(9,"mat-form-field",5)(10,"mat-label"),c(11,"Name"),u(),d(12,"input",6),kn("ngModelChange",function(s){return ne(o),Tn(i.data.name,s)||(i.data.name=s),ae(s)}),u(),d(13,"mat-error"),c(14," A name is required "),u()()(),d(15,"mat-dialog-actions",7)(16,"button",8),c(17),u(),I(18,x0,2,2,"button",9),u()()}t&2&&(f(4),Q(i.data.title),f(),R("mat-dialog-close",!1),f(7),Mn("ngModel",i.data.name),f(4),R("mat-dialog-close",!1),f(),Q(i.data.cancelBtnText),f(),P(i.data.confirmBtnText?18:-1))},dependencies:[Qt,Pi,Ri,Kn,Ni,Xe,je,qt,Ct,At,Qn,$t,xt,et,vt,_t,Ot,ro,bt,ot,Mt,Pt,Xn,hs],styles:[".dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}.mat-mdc-dialog-content[_ngcontent-%COMP%]{max-height:max-content}.field-margin[_ngcontent-%COMP%]{margin-left:15px;margin-bottom:15px}"]})}return n})();function S0(n,a){n&1&&(d(0,"mat-option",19),c(1,"Toggle"),u(),d(2,"mat-option",20),c(3,"Push"),u(),d(4,"mat-option",21),c(5,"Indicator"),u())}function w0(n,a){n&1&&(d(0,"mat-option",8),c(1,"Zone State"),u())}function _0(n,a){if(n&1&&(d(0,"mat-option",10),c(1),u()),n&2){let e=a.$implicit;R("value",Yi(e.value)),f(),Q(e.label)}}function M0(n,a){n&1&&(d(0,"mat-checkbox",12),c(1," Use numeric path "),u())}function T0(n,a){if(n&1){let e=we();d(0,"button",22),$("click",function(){ne(e);let i=T();return ae(i.moveCtrlUp())}),d(1,"mat-icon"),c(2,"arrow_drop_up"),u()()}}function k0(n,a){if(n&1){let e=we();d(0,"button",23),$("click",function(){ne(e);let i=T();return ae(i.moveCtrlDown())}),d(1,"mat-icon"),c(2,"arrow_drop_down"),u()()}}var um=(()=>{class n{app=A(Fi);ctrlFormGroup=x.required();controlIndex=x(void 0);arrayLength=x(void 0);deleteCtrl=ft();moveUp=ft();moveDown=ft();colors=[];ngOnInit(){this.colors=this.app.configurableThemeColors}deleteControl(){let e={ctrlIndex:this.controlIndex(),pathID:this.ctrlFormGroup().get("pathID").value};this.deleteCtrl.emit(e)}moveCtrlUp(){this.moveUp.emit(this.controlIndex())}moveCtrlDown(){this.moveDown.emit(this.controlIndex())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["boolean-control-config"]],inputs:{ctrlFormGroup:[1,"ctrlFormGroup"],controlIndex:[1,"controlIndex"],arrayLength:[1,"arrayLength"]},outputs:{deleteCtrl:"deleteCtrl",moveUp:"moveUp",moveDown:"moveDown"},decls:31,vars:5,consts:[[1,"ctrl-grid","rounded-card","rounded-card-color",3,"formGroup"],[1,"controls","flex-container"],[1,"flex-label"],[1,"full-width"],["matInput","","type","string","placeholder","Enter a display label...","formControlName","ctrlLabel"],[1,"flex-settings"],[1,"settings"],["placeholder","Select Type...","formControlName","type","name","type","required",""],["value","4"],["placeholder","Select Color...","formControlName","color","name","color","required",""],[3,"value"],[1,"flex-full-width"],["formControlName","isNumeric"],[1,"actions"],[1,"flex-actions"],[1,"btn-grid"],["mat-icon-button","","type","button","aria-label","Move control up in the list",1,"up"],["mat-icon-button","","type","button","aria-label","Move control down in the list",1,"down"],["mat-icon-button","","type","button","aria-label","Delete control",1,"delete",3,"click"],["value","1"],["value","2"],["value","3"],["mat-icon-button","","type","button","aria-label","Move control up in the list",1,"up",3,"click"],["mat-icon-button","","type","button","aria-label","Move control down in the list",1,"down",3,"click"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1)(2,"div",2)(3,"mat-form-field",3)(4,"mat-label"),c(5,"Label"),u(),O(6,"input",4),u()(),d(7,"div",5)(8,"mat-form-field",6)(9,"mat-label"),c(10,"Type"),u(),d(11,"mat-select",7),I(12,S0,6,0)(13,w0,2,0,"mat-option",8),u()()(),d(14,"div",5)(15,"mat-form-field",6)(16,"mat-label"),c(17,"Color"),u(),d(18,"mat-select",9),ye(19,_0,2,3,"mat-option",10,Re),u()()(),d(21,"div",11),I(22,M0,2,0,"mat-checkbox",12),u()(),d(23,"div",13)(24,"div",14)(25,"div",15),I(26,T0,3,0,"button",16),I(27,k0,3,0,"button",17),d(28,"button",18),$("click",function(){return i.deleteControl()}),d(29,"mat-icon"),c(30,"delete"),u()()()()()()),t&2&&(R("formGroup",i.ctrlFormGroup()),f(12),P(i.ctrlFormGroup().value.type!=="4"?12:13),f(7),Ae(i.colors),f(3),P(i.ctrlFormGroup().value.type!=="4"?22:-1),f(4),P(i.controlIndex()!==0?26:-1),f(),P(i.controlIndex()!==i.arrayLength()-1?27:-1))},dependencies:[Ot,bt,ot,Mt,Pt,yt,rt,Jt,Ct,At,xt,jt,Rt,_t,fi,ei,Xe,je],styles:['.ctrl-grid[_ngcontent-%COMP%]{display:grid;width:auto;height:auto;margin:0 0 10px;grid-template-columns:[col-start] calc(100% - 90px) [col1-end] 80px [col2-end];grid-template-areas:"controls actions";row-gap:0px;column-gap:10px;justify-items:center;align-items:center;justify-content:center;align-content:center;padding-top:20px}.controls[_ngcontent-%COMP%]{grid-area:controls;width:100%}.actions[_ngcontent-%COMP%]{grid-area:actions}.btn-grid[_ngcontent-%COMP%]{display:grid;width:80px;height:80px;margin:0;grid-template-columns:[col-start] 50% [col1-end] 50% [col2-end];grid-template-rows:[row-start] 50% [row1-end] 50% [row2-end];grid-template-areas:"up delete" "down delete";row-gap:0px;column-gap:0px;justify-items:center;align-items:center;justify-content:center;align-content:center}.up[_ngcontent-%COMP%]{grid-area:up}.down[_ngcontent-%COMP%]{grid-area:down}.delete[_ngcontent-%COMP%]{grid-area:delete}.flex-label[_ngcontent-%COMP%]{flex-grow:2;flex-shrink:2}.flex-settings[_ngcontent-%COMP%]{flex-grow:1;flex-shrink:1}.settings[_ngcontent-%COMP%]{min-width:100px}.flex-actions[_ngcontent-%COMP%]{flex-grow:0;flex-shrink:0}.flex-full-width[_ngcontent-%COMP%]{width:100%}']})}return n})();function D0(n,a){if(n&1){let e=we();d(0,"boolean-control-config",4),$("moveUp",function(i){ne(e);let o=T();return ae(o.moveUp(i))})("moveDown",function(i){ne(e);let o=T();return ae(o.moveDown(i))})("deleteCtrl",function(i){ne(e);let o=T();return ae(o.deletePath(i))}),u()}if(n&2){let e=a.$implicit,t=a.$index,i=T();R("ctrlFormGroup",i.getFormGroup(e))("controlIndex",t)("arrayLength",i.arrayLength)}}var mm=(()=>{class n{fb=A(Zn);multiCtrlArray=x.required();zonesOnlyPaths=x.required();addPath=ft();updatePath=ft();delPath=ft();multiFormGroup=null;arrayLength=0;multiCtrlArraySubscription=null;ngOnInit(){this.arrayLength=this.multiCtrlArray().length,this.multiFormGroup=new Tu({multiCtrlArray:this.multiCtrlArray()}),this.multiCtrlArraySubscription=this.multiCtrlArray().valueChanges.pipe(qn(350)).subscribe(e=>{this.updatePath.emit(e)})}addCtrlGroup(){let e=Di.create();this.multiCtrlArray().push(this.fb.group({ctrlLabel:[null,mt.required],type:[this.zonesOnlyPaths()?"4":"1",mt.required],pathID:[e],color:["contrast"],isNumeric:[!!this.zonesOnlyPaths()],value:[null]})),this.arrayLength=this.multiCtrlArray().length;let t={path:{description:null,path:null,pathID:e,source:"default",pathType:this.zonesOnlyPaths()?"number":"boolean",zonesOnlyPaths:this.zonesOnlyPaths(),supportsPut:!this.zonesOnlyPaths(),isPathConfigurable:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:null,convertUnitTo:null,sampleTime:500},ctrlType:this.zonesOnlyPaths()?4:3};this.addPath.emit(t)}moveUp(e){let t=this.multiCtrlArray().at(e);this.multiCtrlArray().removeAt(e,{emitEvent:!1}),this.multiCtrlArray().insert(e-1,t,{emitEvent:!1})}moveDown(e){let t=this.multiCtrlArray().at(e);this.multiCtrlArray().removeAt(e,{emitEvent:!1}),this.multiCtrlArray().insert(e+1,t,{emitEvent:!1})}deletePath(e){this.delPath.emit(e),this.arrayLength=this.multiCtrlArray().length}getFormGroup(e){return e}ngOnDestroy(){this.multiCtrlArraySubscription?.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["boolean-multicontrol-options"]],inputs:{multiCtrlArray:[1,"multiCtrlArray"],zonesOnlyPaths:[1,"zonesOnlyPaths"]},outputs:{addPath:"addPath",updatePath:"updatePath",delPath:"delPath"},decls:7,vars:1,consts:[[3,"formGroup"],["formArrayName","multiCtrlArray"],[1,"full-width",3,"ctrlFormGroup","controlIndex","arrayLength"],["type","button","mat-mini-fab","","color","primary","aria-label","Add control down in the list",1,"add-btn",3,"click"],[1,"full-width",3,"moveUp","moveDown","deleteCtrl","ctrlFormGroup","controlIndex","arrayLength"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1),ye(2,D0,1,3,"boolean-control-config",2,zt),d(4,"button",3),$("click",function(){return i.addCtrlGroup()}),d(5,"mat-icon"),c(6,"add"),u()()()()),t&2&&(R("formGroup",i.multiFormGroup),f(2),Ae(i.multiCtrlArray().controls))},dependencies:[Ot,Mt,yt,rt,co,um,et,ds,Xe,je],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;padding-top:15px;padding-bottom:15px}.add-btn[_ngcontent-%COMP%]{margin-left:calc(50% - 20px)}"]})}return n})();function E0(n,a){if(n&1&&(d(0,"mat-option",8),c(1),u()),n&2){let e=a.$implicit;R("value",Yi(e.value)),f(),Q(e.label)}}var hm=(()=>{class n{app=A(Fi);displayName=x.required();showLabel=x.required();convertUnitTo=x.required();datasetUUID=x.required();datasetAverageArray=x.required();showAverageData=x.required();showDataPoints=x.required();trackAgainstAverage=x.required();showDatasetMinimumValueLine=x.required();showDatasetMaximumValueLine=x.required();showDatasetAverageValueLine=x.required();showDatasetAngleAverageValueLine=x.required();verticalChart=x.required();inverseYAxis=x.required();showTimeScale=x.required();showYScale=x.required();startScaleAtZero=x.required();yScaleSuggestedMin=x.required();yScaleSuggestedMax=x.required();enableMinMaxScaleLimit=x.required();yScaleMin=x.required();yScaleMax=x.required();numDecimal=x.required();color=x.required();colors=[];ngOnInit(){this.colors=this.app.configurableThemeColors,this.showAverageData()&&!this.showAverageData()?.value&&this.trackAgainstAverage().disable(),this.enableMinMaxScaleLimit()&&this.setValueScaleOptionsControls(this.enableMinMaxScaleLimit().value)}setValueScaleOptionsControls(e){e?(this.yScaleMin()?.enable(),this.yScaleMax()?.enable(),this.yScaleSuggestedMin()?.disable(),this.yScaleSuggestedMax()?.disable()):(this.yScaleMin()?.disable(),this.yScaleMax()?.disable(),this.yScaleSuggestedMin()?.enable(),this.yScaleSuggestedMax()?.enable())}setScaleControls(e){this.setValueScaleOptionsControls(e.value)}enableTrackAgainstMovingAverage(e){e.checked?this.trackAgainstAverage().enable():(this.trackAgainstAverage().setValue(e.checked),this.trackAgainstAverage().disable())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["config-display-chart-options"]],inputs:{displayName:[1,"displayName"],showLabel:[1,"showLabel"],convertUnitTo:[1,"convertUnitTo"],datasetUUID:[1,"datasetUUID"],datasetAverageArray:[1,"datasetAverageArray"],showAverageData:[1,"showAverageData"],showDataPoints:[1,"showDataPoints"],trackAgainstAverage:[1,"trackAgainstAverage"],showDatasetMinimumValueLine:[1,"showDatasetMinimumValueLine"],showDatasetMaximumValueLine:[1,"showDatasetMaximumValueLine"],showDatasetAverageValueLine:[1,"showDatasetAverageValueLine"],showDatasetAngleAverageValueLine:[1,"showDatasetAngleAverageValueLine"],verticalChart:[1,"verticalChart"],inverseYAxis:[1,"inverseYAxis"],showTimeScale:[1,"showTimeScale"],showYScale:[1,"showYScale"],startScaleAtZero:[1,"startScaleAtZero"],yScaleSuggestedMin:[1,"yScaleSuggestedMin"],yScaleSuggestedMax:[1,"yScaleSuggestedMax"],enableMinMaxScaleLimit:[1,"enableMinMaxScaleLimit"],yScaleMin:[1,"yScaleMin"],yScaleMax:[1,"yScaleMax"],numDecimal:[1,"numDecimal"],color:[1,"color"]},decls:85,vars:21,consts:[["minLine",""],[1,"tab-content"],[1,"chart-flex-container"],[1,"chart-panel-group"],[1,"full-width"],["matInput","","placeholder","Enter a label to display","name","displayName",3,"formControl"],["name","showLabel",1,"full-width",3,"formControl"],["placeholder","Select Color...","name","color","required","",3,"formControl"],[3,"value"],[1,"flex-item-rounded-card","rounded-card-color"],[2,"margin-left","10px"],["matInput","","type","number","min","0","max","5","placeholder","Enter or select number...","name","numDecimal","required","",3,"formControl"],["name","showDataPoints",1,"full-width",2,"margin-top","10px",3,"formControl"],["name","showAverageData",1,"full-width",3,"change","formControl"],["name","trackAgainstAverage",1,"full-width",2,"margin-left","25px",3,"formControl"],["name","verticalChart",3,"formControl"],[1,"no-margin"],[1,"mat-caption"],["aria-label","Select an option","name","enableMinMaxScaleLimit",1,"chart-option-radio-group",3,"formControl"],[1,"chart-option-radio-button",3,"change","value"],[1,"chart-option-radio-button-config"],[1,"chart-option-radio-button-config-form-field"],["matInput","","type","number","name","yScaleSuggestedMin",3,"formControl"],["matInput","","type","number","name","yScaleSuggestedMax",3,"formControl"],[1,"chart-option-radio-button-config-item"],["matInput","","type","number","name","yScaleMin","required","",3,"formControl"],["matInput","","type","number","name","yScaleMax","required","",3,"formControl"],["name","showYScale",1,"full-width",3,"formControl"],["name","inverseYAxis",3,"formControl"],["name","showTimeScale",1,"full-width",3,"formControl"],["name","showDatasetMaximumValueLine",1,"full-width",3,"formControl"],["name","showDatasetAverageValueLine",1,"full-width",3,"formControl"],["name","showDatasetMinimumValueLine",1,"full-width",3,"formControl"]],template:function(t,i){t&1&&(d(0,"div",1)(1,"div",2)(2,"div",3)(3,"mat-form-field",4)(4,"mat-label"),c(5,"Widget Label"),u(),O(6,"input",5),u()(),d(7,"div",3)(8,"mat-checkbox",6),c(9," Show Label "),u()()(),d(10,"div",2)(11,"mat-form-field",4)(12,"mat-label"),c(13,"Color"),u(),d(14,"mat-select",7),ye(15,E0,2,3,"mat-option",8,Re),u()()(),d(17,"div",2)(18,"div",9)(19,"p"),c(20,"Series"),u(),d(21,"mat-form-field",10)(22,"mat-label"),c(23,"Value Decimal Places"),u(),O(24,"input",11),u(),d(25,"mat-checkbox",12),c(26," Display Data Points "),u(),d(27,"mat-checkbox",13),$("change",function(r){return i.enableTrackAgainstMovingAverage(r)}),c(28," Display Moving Average "),u(),d(29,"mat-checkbox",14),c(30," Track Against Moving Average "),u(),d(31,"mat-checkbox",15),c(32," Vertical Data Graph "),u()(),d(33,"div",9)(34,"div")(35,"p",16),c(36,"Data Scale"),u(),d(37,"span",17),c(38,"(Default node is automatic scale)"),u(),d(39,"mat-radio-group",18)(40,"mat-radio-button",19),$("change",function(r){return i.setScaleControls(r)}),c(41,"Auto Scale"),u(),d(42,"div",20)(43,"mat-form-field",21)(44,"mat-label"),c(45,"Suggested Min"),u(),O(46,"input",22),u(),d(47,"mat-form-field",21)(48,"mat-label"),c(49,"Suggested Max"),u(),O(50,"input",23),u()(),d(51,"mat-radio-button",19),$("change",function(r){return i.setScaleControls(r)}),c(52," Fixed Scale "),u(),d(53,"div",20)(54,"div",24)(55,"mat-form-field",21)(56,"mat-label"),c(57,"Min"),u(),O(58,"input",25),u()(),d(59,"div",24)(60,"mat-form-field",21)(61,"mat-label"),c(62,"Max"),u(),O(63,"input",26),u()()()(),d(64,"mat-checkbox",27),c(65," Show Scale Ticks "),u(),d(66,"mat-checkbox",28),c(67," Inverse Scale "),u()()(),d(68,"div",9)(69,"div")(70,"p",16),c(71,"Time Scale"),u(),d(72,"mat-checkbox",29),c(73," Show Scale Ticks "),u()()(),d(74,"div",9)(75,"div")(76,"p",16),c(77,"Dataset"),u(),d(78,"mat-checkbox",30),c(79," Show Maximum Line "),u(),d(80,"mat-checkbox",31),c(81," Show Average Line "),u(),d(82,"mat-checkbox",32,0),c(84," Show Minimum Line "),u()()()()()),t&2&&(f(6),R("formControl",i.displayName()),f(2),R("formControl",i.showLabel()),f(6),R("formControl",i.color()),f(),Ae(i.colors),f(9),R("formControl",i.numDecimal()),f(),R("formControl",i.showDataPoints()),f(2),R("formControl",i.showAverageData()),f(2),R("formControl",i.trackAgainstAverage()),f(2),R("formControl",i.verticalChart()),f(8),R("formControl",i.enableMinMaxScaleLimit()),f(),R("value",!1),f(6),R("formControl",i.yScaleSuggestedMin()),f(4),R("formControl",i.yScaleSuggestedMax()),f(),R("value",!0),f(7),R("formControl",i.yScaleMin()),f(5),R("formControl",i.yScaleMax()),f(),R("formControl",i.showYScale()),f(2),R("formControl",i.inverseYAxis()),f(6),R("formControl",i.showTimeScale()),f(6),R("formControl",i.showDatasetMaximumValueLine()),f(2),R("formControl",i.showDatasetAverageValueLine()),f(2),R("formControl",i.showDatasetMinimumValueLine()))},dependencies:[ps,qt,Ct,At,fi,ei,gi,jt,Rt,ir,$t,xt,Gu,Fu,Bu,yt,bt,Oi,ot,Pt,vn,uo,Vi],styles:[".chart-flex-container[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;margin:15px 0;gap:15px;align-items:stretch}.chart-panel-group[_ngcontent-%COMP%]{min-width:250px;flex-grow:1}.no-margin[_ngcontent-%COMP%]{margin:0}.chart-option-radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin:0;align-items:flex-start}.chart-option-radio-button[_ngcontent-%COMP%]{margin:0}.chart-option-radio-button-config[_ngcontent-%COMP%]{margin-left:35px;display:flex;flex-direction:row;flex-wrap:wrap;gap:10px;align-items:flex-start}.chart-option-radio-button-config-item[_ngcontent-%COMP%]{flex-grow:0;flex-shrink:1;min-width:50px}.chart-option-radio-button-config-form-field[_ngcontent-%COMP%]{display:block;max-width:118px}"]})}return n})();var P0=["panel"],R0=["*"];function N0(n,a){if(n&1&&(D(0,"div",1,0),ts(2),G()),n&2){let e=a.id,t=T();ct(t._classList),dt("mat-mdc-autocomplete-visible",t.showPanel)("mat-mdc-autocomplete-hidden",!t.showPanel)("mat-autocomplete-panel-animations-enabled",!t._animationsDisabled)("mat-primary",t._color==="primary")("mat-accent",t._color==="accent")("mat-warn",t._color==="warn"),ji("id",t.id),ie("aria-label",t.ariaLabel||null)("aria-labelledby",t._getPanelAriaLabelledby(e))}}var Xl=class{source;option;constructor(a,e){this.source=a,this.option=e}},pm=new _n("mat-autocomplete-default-options",{providedIn:"root",factory:()=>({autoActiveFirstOption:!1,autoSelectActiveOption:!1,hideSingleSelectionIndicator:!1,requireSelection:!1,hasBackdrop:!1})}),_o=(()=>{class n{_changeDetectorRef=A(ki);_elementRef=A(nt);_defaults=A(pm);_animationsDisabled=pn();_activeOptionChanges=eo.EMPTY;_keyManager;showPanel=!1;get isOpen(){return this._isOpen&&this.showPanel}_isOpen=!1;_latestOpeningTrigger;_setColor(e){this._color=e,this._changeDetectorRef.markForCheck()}_color;template;panel;options;optionGroups;ariaLabel;ariaLabelledby;displayWith=null;autoActiveFirstOption;autoSelectActiveOption;requireSelection;panelWidth;disableRipple=!1;optionSelected=new hi;opened=new hi;closed=new hi;optionActivated=new hi;set classList(e){this._classList=e,this._elementRef.nativeElement.className=""}_classList;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(e){this._hideSingleSelectionIndicator=e,this._syncParentProperties()}_hideSingleSelectionIndicator;_syncParentProperties(){if(this.options)for(let e of this.options)e._changeDetectorRef.markForCheck()}id=A(Ta).getId("mat-autocomplete-");inertGroups;constructor(){let e=A(jc);this.inertGroups=e?.SAFARI||!1,this.autoActiveFirstOption=!!this._defaults.autoActiveFirstOption,this.autoSelectActiveOption=!!this._defaults.autoSelectActiveOption,this.requireSelection=!!this._defaults.requireSelection,this._hideSingleSelectionIndicator=this._defaults.hideSingleSelectionIndicator??!1}ngAfterContentInit(){this._keyManager=new Jc(this.options).withWrap().skipPredicate(this._skipPredicate),this._activeOptionChanges=this._keyManager.change.subscribe(e=>{this.isOpen&&this.optionActivated.emit({source:this,option:this.options.toArray()[e]||null})}),this._setVisibility()}ngOnDestroy(){this._keyManager?.destroy(),this._activeOptionChanges.unsubscribe()}_setScrollTop(e){this.panel&&(this.panel.nativeElement.scrollTop=e)}_getScrollTop(){return this.panel?this.panel.nativeElement.scrollTop:0}_setVisibility(){this.showPanel=!!this.options?.length,this._changeDetectorRef.markForCheck()}_emitSelectEvent(e){let t=new Xl(this,e);this.optionSelected.emit(t)}_getPanelAriaLabelledby(e){if(this.ariaLabel)return null;let t=e?e+" ":"";return this.ariaLabelledby?t+this.ariaLabelledby:e}_skipPredicate(){return!1}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["mat-autocomplete"]],contentQueries:function(t,i,o){if(t&1&&is(o,Rt,5)(o,Ru,5),t&2){let r;Mi(r=Ti())&&(i.options=r),Mi(r=Ti())&&(i.optionGroups=r)}},viewQuery:function(t,i){if(t&1&&$n(Oc,7)(P0,5),t&2){let o;Mi(o=Ti())&&(i.template=o.first),Mi(o=Ti())&&(i.panel=o.first)}},hostAttrs:[1,"mat-mdc-autocomplete"],inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],displayWith:"displayWith",autoActiveFirstOption:[2,"autoActiveFirstOption","autoActiveFirstOption",It],autoSelectActiveOption:[2,"autoSelectActiveOption","autoSelectActiveOption",It],requireSelection:[2,"requireSelection","requireSelection",It],panelWidth:"panelWidth",disableRipple:[2,"disableRipple","disableRipple",It],classList:[0,"class","classList"],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",It]},outputs:{optionSelected:"optionSelected",opened:"opened",closed:"closed",optionActivated:"optionActivated"},exportAs:["matAutocomplete"],features:[er([{provide:Pu,useExisting:n}])],ngContentSelectors:R0,decls:1,vars:0,consts:[["panel",""],["role","listbox",1,"mat-mdc-autocomplete-panel","mdc-menu-surface","mdc-menu-surface--open",3,"id"]],template:function(t,i){t&1&&(es(),Lc(0,N0,3,17,"ng-template"))},styles:[`div.mat-mdc-autocomplete-panel{width:100%;max-height:256px;visibility:hidden;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;position:relative;border-radius:var(--mat-autocomplete-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-autocomplete-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-autocomplete-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-autocomplete-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-top-left-radius:0;border-top-right-radius:0}.mat-mdc-autocomplete-panel-above div.mat-mdc-autocomplete-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:center bottom}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-visible{visibility:visible}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-hidden,.cdk-overlay-pane:has(>.mat-mdc-autocomplete-hidden){visibility:hidden;pointer-events:none}@keyframes _mat-autocomplete-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}.mat-autocomplete-panel-animations-enabled{animation:_mat-autocomplete-enter 120ms cubic-bezier(0, 0, 0.2, 1)}mat-autocomplete{display:none}
42
+ `],encapsulation:2,changeDetection:0})}return n})();var O0={provide:ms,useExisting:jr(()=>Ra),multi:!0};var V0=new _n("mat-autocomplete-scroll-strategy",{providedIn:"root",factory:()=>{let n=A(Zo);return()=>cu(n)}}),Ra=(()=>{class n{_environmentInjector=A(Pc);_element=A(nt);_injector=A(Zo);_viewContainerRef=A(Zr);_zone=A(Je);_changeDetectorRef=A(ki);_dir=A(ls,{optional:!0});_formField=A(Eu,{optional:!0,host:!0});_viewportRuler=A(su);_scrollStrategy=A(V0);_renderer=A(Xr);_animationsDisabled=pn();_defaults=A(pm,{optional:!0});_overlayRef=null;_portal;_componentDestroyed=!1;_initialized=new Zt;_keydownSubscription;_outsideClickSubscription;_cleanupWindowBlur;_previousValue=null;_valueOnAttach=null;_valueOnLastKeydown=null;_positionStrategy;_manuallyFloatingLabel=!1;_closingActionsSubscription;_viewportSubscription=eo.EMPTY;_breakpointObserver=A(no);_handsetLandscapeSubscription=eo.EMPTY;_canOpenOnNextFocus=!0;_valueBeforeAutoSelection;_pendingAutoselectedOption=null;_closeKeyEventStream=new Zt;_overlayPanelClass=Xc(this._defaults?.overlayPanelClass||[]);_windowBlurHandler=()=>{this._canOpenOnNextFocus=this.panelOpen||!this._hasFocus()};_onChange=()=>{};_onTouched=()=>{};autocomplete;position="auto";connectedTo;autocompleteAttribute="off";autocompleteDisabled=!1;constructor(){}_aboveClass="mat-mdc-autocomplete-panel-above";ngAfterViewInit(){this._initialized.next(),this._initialized.complete(),this._cleanupWindowBlur=this._renderer.listen("window","blur",this._windowBlurHandler)}ngOnChanges(e){e.position&&this._positionStrategy&&(this._setStrategyPositions(this._positionStrategy),this.panelOpen&&this._overlayRef.updatePosition())}ngOnDestroy(){this._cleanupWindowBlur?.(),this._handsetLandscapeSubscription.unsubscribe(),this._viewportSubscription.unsubscribe(),this._componentDestroyed=!0,this._destroyPanel(),this._closeKeyEventStream.complete(),this._clearFromModal()}get panelOpen(){return this._overlayAttached&&this.autocomplete.showPanel}_overlayAttached=!1;openPanel(){this._openPanelInternal()}closePanel(){this._resetLabel(),this._overlayAttached&&(this.panelOpen&&this._zone.run(()=>{this.autocomplete.closed.emit()}),this.autocomplete._latestOpeningTrigger===this&&(this.autocomplete._isOpen=!1,this.autocomplete._latestOpeningTrigger=null),this._overlayAttached=!1,this._pendingAutoselectedOption=null,this._overlayRef&&this._overlayRef.hasAttached()&&(this._overlayRef.detach(),this._closingActionsSubscription.unsubscribe()),this._updatePanelState(),this._componentDestroyed||this._changeDetectorRef.detectChanges(),this._trackedModal&&ss(this._trackedModal,"aria-owns",this.autocomplete.id))}updatePosition(){this._overlayAttached&&this._overlayRef.updatePosition()}get panelClosingActions(){return wi(this.optionSelections,this.autocomplete._keyManager.tabOut.pipe(_i(()=>this._overlayAttached)),this._closeKeyEventStream,this._getOutsideClickStream(),this._overlayRef?this._overlayRef.detachments().pipe(_i(()=>this._overlayAttached)):Bl()).pipe(si(e=>e instanceof Nu?e:null))}optionSelections=Sc(()=>{let e=this.autocomplete?this.autocomplete.options:null;return e?e.changes.pipe(to(e),Hr(()=>wi(...e.map(t=>t.onSelectionChange)))):this._initialized.pipe(Hr(()=>this.optionSelections))});get activeOption(){return this.autocomplete&&this.autocomplete._keyManager?this.autocomplete._keyManager.activeItem:null}_getOutsideClickStream(){return new Fl(e=>{let t=o=>{let r=$c(o),s=this._formField?this._formField.getConnectedOverlayOrigin().nativeElement:null,l=this.connectedTo?this.connectedTo.elementRef.nativeElement:null;this._overlayAttached&&r!==this._element.nativeElement&&!this._hasFocus()&&(!s||!s.contains(r))&&(!l||!l.contains(r))&&this._overlayRef&&!this._overlayRef.overlayElement.contains(r)&&e.next(o)},i=[this._renderer.listen("document","click",t),this._renderer.listen("document","auxclick",t),this._renderer.listen("document","touchend",t)];return()=>{i.forEach(o=>o())}})}writeValue(e){Promise.resolve(null).then(()=>this._assignOptionValue(e))}registerOnChange(e){this._onChange=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this._element.nativeElement.disabled=e}_handleKeydown(e){let t=e,i=t.keyCode,o=jn(t);if(i===27&&!o&&t.preventDefault(),this._valueOnLastKeydown=this._element.nativeElement.value,this.activeOption&&i===13&&this.panelOpen&&!o)this.activeOption._selectViaInteraction(),this._resetActiveItem(),t.preventDefault();else if(this.autocomplete){let r=this.autocomplete._keyManager.activeItem,s=i===38||i===40;i===9||s&&!o&&this.panelOpen?this.autocomplete._keyManager.onKeydown(t):s&&this._canOpen()&&this._openPanelInternal(this._valueOnLastKeydown),(s||this.autocomplete._keyManager.activeItem!==r)&&(this._scrollToOption(this.autocomplete._keyManager.activeItemIndex||0),this.autocomplete.autoSelectActiveOption&&this.activeOption&&(this._pendingAutoselectedOption||(this._valueBeforeAutoSelection=this._valueOnLastKeydown),this._pendingAutoselectedOption=this.activeOption,this._assignOptionValue(this.activeOption.value)))}}_handleInput(e){let t=e.target,i=t.value;if(t.type==="number"&&(i=i==""?null:parseFloat(i)),this._previousValue!==i){if(this._previousValue=i,this._pendingAutoselectedOption=null,(!this.autocomplete||!this.autocomplete.requireSelection)&&this._onChange(i),!i)this._clearPreviousSelectedOption(null,!1);else if(this.panelOpen&&!this.autocomplete.requireSelection){let o=this.autocomplete.options?.find(r=>r.selected);if(o){let r=this._getDisplayValue(o.value);i!==r&&o.deselect(!1)}}if(this._canOpen()&&this._hasFocus()){let o=this._valueOnLastKeydown??this._element.nativeElement.value;this._valueOnLastKeydown=null,this._openPanelInternal(o)}}}_handleFocus(){this._canOpenOnNextFocus?this._canOpen()&&(this._previousValue=this._element.nativeElement.value,this._attachOverlay(this._previousValue),this._floatLabel(!0)):this._canOpenOnNextFocus=!0}_handleClick(){this._canOpen()&&!this.panelOpen&&this._openPanelInternal()}_hasFocus(){return qc()===this._element.nativeElement}_floatLabel(e=!1){this._formField&&this._formField.floatLabel==="auto"&&(e?this._formField._animateAndLockLabel():this._formField.floatLabel="always",this._manuallyFloatingLabel=!0)}_resetLabel(){this._manuallyFloatingLabel&&(this._formField&&(this._formField.floatLabel="auto"),this._manuallyFloatingLabel=!1)}_subscribeToClosingActions(){let e=new Fl(i=>{Nc(()=>{i.next()},{injector:this._environmentInjector})}),t=this.autocomplete.options?.changes.pipe($r(()=>this._positionStrategy.reapplyLastPosition()),Mc(0))??Bl();return wi(e,t).pipe(Hr(()=>this._zone.run(()=>{let i=this.panelOpen;return this._resetActiveItem(),this._updatePanelState(),this._changeDetectorRef.detectChanges(),this.panelOpen&&this._overlayRef.updatePosition(),i!==this.panelOpen&&(this.panelOpen?this._emitOpened():this.autocomplete.closed.emit()),this.panelClosingActions})),mi(1)).subscribe(i=>this._setValueAndClose(i))}_emitOpened(){this.autocomplete.opened.emit()}_destroyPanel(){this._overlayRef&&(this.closePanel(),this._overlayRef.dispose(),this._overlayRef=null)}_getDisplayValue(e){let t=this.autocomplete;return t&&t.displayWith?t.displayWith(e):e}_assignOptionValue(e){let t=this._getDisplayValue(e);e==null&&this._clearPreviousSelectedOption(null,!1),this._updateNativeInputValue(t??"")}_updateNativeInputValue(e){this._formField?this._formField._control.value=e:this._element.nativeElement.value=e,this._previousValue=e}_setValueAndClose(e){let t=this.autocomplete,i=e?e.source:this._pendingAutoselectedOption;i?(this._clearPreviousSelectedOption(i),this._assignOptionValue(i.value),this._onChange(i.value),t._emitSelectEvent(i),this._element.nativeElement.focus()):t.requireSelection&&this._element.nativeElement.value!==this._valueOnAttach&&(this._clearPreviousSelectedOption(null),this._assignOptionValue(null),this._onChange(null)),this.closePanel()}_clearPreviousSelectedOption(e,t){this.autocomplete?.options?.forEach(i=>{i!==e&&i.selected&&i.deselect(t)})}_openPanelInternal(e=this._element.nativeElement.value){if(this._attachOverlay(e),this._floatLabel(),this._trackedModal){let t=this.autocomplete.id;zl(this._trackedModal,"aria-owns",t)}}_attachOverlay(e){if(!this.autocomplete)return;let t=this._overlayRef;t?(this._positionStrategy.setOrigin(this._getConnectedElement()),t.updateSize({width:this._getPanelWidth()})):(this._portal=new au(this.autocomplete.template,this._viewContainerRef,{id:this._formField?.getLabelId()}),t=pu(this._injector,this._getOverlayConfig()),this._overlayRef=t,this._viewportSubscription=this._viewportRuler.change().subscribe(()=>{this.panelOpen&&t&&t.updateSize({width:this._getPanelWidth()})}),this._handsetLandscapeSubscription=this._breakpointObserver.observe(Ki.HandsetLandscape).subscribe(o=>{o.matches?this._positionStrategy.withFlexibleDimensions(!0).withGrowAfterOpen(!0).withViewportMargin(8):this._positionStrategy.withFlexibleDimensions(!1).withGrowAfterOpen(!1).withViewportMargin(0)})),t&&!t.hasAttached()&&(t.attach(this._portal),this._valueOnAttach=e,this._valueOnLastKeydown=null,this._closingActionsSubscription=this._subscribeToClosingActions());let i=this.panelOpen;this.autocomplete._isOpen=this._overlayAttached=!0,this.autocomplete._latestOpeningTrigger=this,this.autocomplete._setColor(this._formField?.color),this._updatePanelState(),this._applyModalPanelOwnership(),this.panelOpen&&i!==this.panelOpen&&this._emitOpened()}_handlePanelKeydown=e=>{(e.keyCode===27&&!jn(e)||e.keyCode===38&&jn(e,"altKey"))&&(this._pendingAutoselectedOption&&(this._updateNativeInputValue(this._valueBeforeAutoSelection??""),this._pendingAutoselectedOption=null),this._closeKeyEventStream.next(),this._resetActiveItem(),e.stopPropagation(),e.preventDefault())};_updatePanelState(){if(this.autocomplete._setVisibility(),this.panelOpen){let e=this._overlayRef;this._keydownSubscription||(this._keydownSubscription=e.keydownEvents().subscribe(this._handlePanelKeydown)),this._outsideClickSubscription||(this._outsideClickSubscription=e.outsidePointerEvents().subscribe())}else this._keydownSubscription?.unsubscribe(),this._outsideClickSubscription?.unsubscribe(),this._keydownSubscription=this._outsideClickSubscription=void 0}_getOverlayConfig(){return new uu({positionStrategy:this._getOverlayPosition(),scrollStrategy:this._scrollStrategy(),width:this._getPanelWidth(),direction:this._dir??void 0,hasBackdrop:this._defaults?.hasBackdrop,backdropClass:this._defaults?.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:this._overlayPanelClass,disableAnimations:this._animationsDisabled})}_getOverlayPosition(){let e=mu(this._injector,this._getConnectedElement()).withFlexibleDimensions(!1).withPush(!1).withPopoverLocation("inline");return this._setStrategyPositions(e),this._positionStrategy=e,e}_setStrategyPositions(e){let t=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],i=this._aboveClass,o=[{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:i},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:i}],r;this.position==="above"?r=o:this.position==="below"?r=t:r=[...t,...o],e.withPositions(r)}_getConnectedElement(){return this.connectedTo?this.connectedTo.elementRef:this._formField?this._formField.getConnectedOverlayOrigin():this._element}_getPanelWidth(){return this.autocomplete.panelWidth||this._getHostWidth()}_getHostWidth(){return this._getConnectedElement().nativeElement.getBoundingClientRect().width}_resetActiveItem(){let e=this.autocomplete;if(e.autoActiveFirstOption){let t=-1;for(let i=0;i<e.options.length;i++)if(!e.options.get(i).disabled){t=i;break}e._keyManager.setActiveItem(t)}else e._keyManager.setActiveItem(-1)}_canOpen(){let e=this._element.nativeElement;return!e.readOnly&&!e.disabled&&!this.autocompleteDisabled}_scrollToOption(e){let t=this.autocomplete,i=Ou(e,t.options,t.optionGroups);if(e===0&&i===1)t._setScrollTop(0);else if(t.panel){let o=t.options.toArray()[e];if(o){let r=o._getHostElement(),s=Vu(r.offsetTop,r.offsetHeight,t._getScrollTop(),t.panel.nativeElement.offsetHeight);t._setScrollTop(s)}}}_trackedModal=null;_applyModalPanelOwnership(){let e=this._element.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!e)return;let t=this.autocomplete.id;this._trackedModal&&ss(this._trackedModal,"aria-owns",t),zl(e,"aria-owns",t),this._trackedModal=e}_clearFromModal(){if(this._trackedModal){let e=this.autocomplete.id;ss(this._trackedModal,"aria-owns",e),this._trackedModal=null}}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["input","matAutocomplete",""],["textarea","matAutocomplete",""]],hostAttrs:[1,"mat-mdc-autocomplete-trigger"],hostVars:7,hostBindings:function(t,i){t&1&&$("focusin",function(){return i._handleFocus()})("blur",function(){return i._onTouched()})("input",function(r){return i._handleInput(r)})("keydown",function(r){return i._handleKeydown(r)})("click",function(){return i._handleClick()}),t&2&&ie("autocomplete",i.autocompleteAttribute)("role",i.autocompleteDisabled?null:"combobox")("aria-autocomplete",i.autocompleteDisabled?null:"list")("aria-activedescendant",i.panelOpen&&i.activeOption?i.activeOption.id:null)("aria-expanded",i.autocompleteDisabled?null:i.panelOpen.toString())("aria-controls",i.autocompleteDisabled||!i.panelOpen||i.autocomplete==null?null:i.autocomplete.id)("aria-haspopup",i.autocompleteDisabled?null:"listbox")},inputs:{autocomplete:[0,"matAutocomplete","autocomplete"],position:[0,"matAutocompletePosition","position"],connectedTo:[0,"matAutocompleteConnectedTo","connectedTo"],autocompleteAttribute:[0,"autocomplete","autocompleteAttribute"],autocompleteDisabled:[2,"matAutocompleteDisabled","autocompleteDisabled",It]},exportAs:["matAutocompleteTrigger"],features:[er([O0]),dn]})}return n})(),Ts=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=cn({type:n});static \u0275inj=ln({imports:[gu,ir,lu,ir,Yn]})}return n})();var L0=(n,a)=>a.path;function W0(n,a){if(n&1){let e=we();d(0,"button",24),$("click",function(){ne(e);let i=T();return ae(i.clearPathInputField())}),d(1,"mat-icon"),c(2,"close"),u()()}}function F0(n,a){n&1&&(d(0,"mat-error"),c(1," Path is required. Please enter a valid Signal K path. "),u())}function B0(n,a){n&1&&(d(0,"mat-error"),c(1," Path not recognized. Please enter a path from the server's published list. "),u())}function G0(n,a){if(n&1&&(d(0,"span"),c(1),u(),O(2,"br"),d(3,"small",25),c(4),u()),n&2){let e=T().$implicit;f(),Q(e.path),f(3),Q(e.meta.description)}}function z0(n,a){if(n&1&&c(0),n&2){let e=T().$implicit;be(" ",e.path," ")}}function U0(n,a){if(n&1&&(d(0,"mat-option",8),I(1,G0,5,2)(2,z0,1,1),u()),n&2){let e=a.$implicit;R("value",e.path),f(),P(e.meta!==void 0?1:2)}}function H0(n,a){if(n&1&&(d(0,"mat-option",12),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),be(" ",e," ")}}function q0(n,a){if(n&1&&(d(0,"mat-option",12),c(1),u()),n&2){let e=a.$implicit;R("value",e.measure),f(),be(" ",e.description," ")}}function $0(n,a){if(n&1&&(d(0,"mat-optgroup",14),ye(1,q0,2,2,"mat-option",12,Re),u()),n&2){let e=a.$implicit;R("label",e.group),f(),Ae(e.units)}}function j0(n){return a=>{let e=a.parent?.value?.pathRequired!==!1,t=a.value;return e?t===null||t===""?{requireMatch:!0}:n().some(r=>r.path===t)?null:{requireMatch:!0}:t===null||t===""||n().some(r=>r.path===t)?null:{requireMatch:!0}}}var fm=(()=>{class n{convertUnitTo=x.required();filterSelfPaths=x.required();datachartPath=x.required();datachartSource=x.required();timeScale=x.required();period=x.required();data=A(st);units=A(He);_destroyRef=A(Ie);numericPaths=w([]);filteredNumericPaths=w([]);unitList=w({});pathSources=w([]);maxDuration=L(()=>this.timeScale().value==="day"?365:60);ngOnInit(){if(this.numericPaths.set(this.data.getPathsAndMetaByType("number",!1,!1,this.filterSelfPaths().value).sort()),this.filteredNumericPaths.set(this.numericPaths()),this.datachartPath().valueChanges.pipe(qn(300),De(this._destroyRef)).subscribe(e=>{let t=(e||"").toLowerCase().trim();t?this.filteredNumericPaths.set(this.numericPaths().filter(i=>i.path.toLowerCase().includes(t))):this.filteredNumericPaths.set(this.numericPaths())}),this.datachartPath().setValidators([j0(()=>this.getPaths())]),this.datachartPath()?.value){let e=this.data.getPathObject(this.datachartPath().value);this.setPathSources(e),this.unitList.set(this.units.getConversionsForPath(this.datachartPath().value))}this.setInitFormState()}setInitFormState(e=!1){this.datachartSource().value&&!e?this.datachartSource().enable():(this.datachartSource().reset(),this.datachartSource().disable()),this.convertUnitTo().value&&!e?this.convertUnitTo().enable():(this.convertUnitTo().reset(),this.convertUnitTo().disable()),this.timeScale().value?this.timeScale().enable():this.timeScale().disable(),this.period().value?this.period().enable():this.period().disable()}getPaths(){return this.data.getPathsAndMetaByType("number",!1,!1,this.filterSelfPaths().value).sort()}clearPathInputField(){this.datachartPath().setValue(""),this.setInitFormState(!0)}changePath(e){let t=this.data.getPathObject(e.option.value);if(t===null){this.pathSources.set([]),this.datachartSource().reset(),this.datachartSource().disable(),this.convertUnitTo().reset(),this.convertUnitTo().disable(),this.setPathUnits();return}this.setPathSources(t),this.setPathUnits(t.path)}setPathSources(e){Object.keys(e.sources).length==1?(this.pathSources.set(["default"]),this.datachartSource().setValue("default"),this.datachartSource().enable()):Object.keys(e.sources).length>1&&(this.pathSources.set(Object.keys(e.sources).sort()),this.datachartSource().value?this.datachartSource().setValue(this.datachartSource().value):this.datachartSource().reset(),this.datachartSource().enable())}setPathUnits(e){e?(this.unitList.set(this.units.getConversionsForPath(e)),this.convertUnitTo().reset(),this.convertUnitTo()?.enable()):(this.unitList.set(this.units.getConversionsForPath("")),this.convertUnitTo().reset(),this.convertUnitTo()?.disable())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["config-dataset-chart-options"]],inputs:{convertUnitTo:[1,"convertUnitTo"],filterSelfPaths:[1,"filterSelfPaths"],datachartPath:[1,"datachartPath"],datachartSource:[1,"datachartSource"],timeScale:[1,"timeScale"],period:[1,"period"]},decls:60,vars:10,consts:[["pathInput",""],["pathAutoComplete","matAutocomplete"],[1,"display-content","tab-content"],[1,"flex-container",2,"margin-top","10px"],[1,"full-width"],["type","text","matInput","","placeholder","Type to use autocomplete or select from list","required","",3,"formControl","matAutocomplete"],["mat-icon-button","","matIconSuffix","","aria-label","Clear"],[3,"optionSelected"],[2,"min-height","48px","line-height","1.15","height","auto","padding","8px 16px","white-space","normal",3,"value"],[3,"formControl"],[1,"flex-field-50"],["placeholder","Select data source","name","sourceControl","required","",3,"formControl"],[3,"value"],["placeholder","Select unit...","name","convertUnitTo","required","",3,"formControl"],[3,"label"],[2,"margin-top","10px"],["placeholder","Select dataset time scale","name","timeScaleFormat","required","",3,"formControl"],["value","day"],["value","hour"],["value","minute"],["value","second"],["matInput","","type","number","min","1","step","1","placeholder","Enter or select number...","required","",3,"max","formControl"],[2,"grid-column","1 / -1","font-size","0.9em","color","var(--mat-sys-outline)"],["routerLink","/help/history-data-charts",2,"color","var(--kip-blue-color)","cursor","pointer","text-decoration","underline"],["mat-icon-button","","matIconSuffix","","aria-label","Clear",3,"click"],[1,"pathMetaDescription"]],template:function(t,i){if(t&1&&(d(0,"div",2)(1,"div",3)(2,"mat-form-field",4)(3,"mat-label"),c(4," Signal K Path "),u(),O(5,"input",5,0),I(7,W0,3,0,"button",6),I(8,F0,2,0,"mat-error")(9,B0,2,0,"mat-error"),d(10,"mat-autocomplete",7,1),$("optionSelected",function(r){return i.changePath(r)}),ye(12,U0,3,2,"mat-option",8,L0),u()()(),d(14,"div",3)(15,"mat-checkbox",9),c(16," Restrict to own vessel "),u()(),d(17,"div",3)(18,"div",10)(19,"mat-form-field",4)(20,"mat-label"),c(21,"Source"),u(),d(22,"mat-select",11),ye(23,H0,2,2,"mat-option",12,zt),u()()(),d(25,"div",10)(26,"mat-form-field",4)(27,"mat-label"),c(28,"Display Format"),u(),d(29,"mat-select",13),ye(30,$0,3,1,"mat-optgroup",14,Re),u()()()(),O(32,"br"),d(33,"p",15),c(34," Time scale and duration set how much history the chart shows (the chart window). Data is sampled to keep roughly 120 points across the window; very short windows may show fewer points for performance. "),u(),d(35,"div",3)(36,"div",10)(37,"mat-form-field",4)(38,"mat-label"),c(39,"Time Scale"),u(),d(40,"mat-select",16)(41,"mat-option",17),c(42,"Days"),u(),d(43,"mat-option",18),c(44,"Hours"),u(),d(45,"mat-option",19),c(46,"Minutes"),u(),d(47,"mat-option",20),c(48,"Seconds"),u()()()(),d(49,"div",10)(50,"mat-form-field",4)(51,"mat-label"),c(52,"Duration"),u(),O(53,"input",21),u()(),d(54,"div",22)(55,"strong"),c(56,"History API:"),u(),c(57," When the time scale is minutes or longer, the Data Chart can be pre-filled with historical data. "),d(58,"a",23),c(59,"Learn more"),u()()()()),t&2){let o=Lt(6),r=Lt(11);f(5),R("formControl",i.datachartPath())("matAutocomplete",r),f(2),P(o.value?7:-1),f(),P(o.validity.valueMissing?8:i.datachartPath().errors?9:-1),f(4),Ae(i.filteredNumericPaths()),f(3),R("formControl",i.filterSelfPaths()),f(7),R("formControl",i.datachartSource()),f(),Ae(i.pathSources()),f(6),R("formControl",i.convertUnitTo()),f(),Ae(i.unitList().conversions),f(10),R("formControl",i.timeScale()),f(13),R("max",i.maxDuration())("formControl",i.period())}},dependencies:[Xe,je,Ts,_o,Rt,mo,Ra,fi,ei,qt,Ct,At,Qn,Jn,gi,jt,$t,xt,et,_t,yt,bt,Oi,ot,Pt,vn,uo,Vi,us],styles:[".display-content[_ngcontent-%COMP%]{display:block;height:100%;width:100%;padding-top:15px;padding-bottom:10px}"]})}return n})();var vm=(()=>{class n{transform(e){return Object.keys(e)}static \u0275fac=function(t){return new(t||n)};static \u0275pipe=Qr({name:"objectKeys",type:n,pure:!0})}return n})();var Y0=(n,a)=>a.path;function K0(n,a){n&1&&O(0,"i",18)}function X0(n,a){n&1&&O(0,"i",19)}function Z0(n,a){if(n&1&&(d(0,"mat-option",16),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),Ut("",e.properties.quantity,": ",e.properties.display)}}function Q0(n,a){if(n&1){let e=we();d(0,"div",5)(1,"mat-form-field",17)(2,"mat-label"),I(3,K0,1,0,"i",18)(4,X0,1,0,"i",19),c(5," Filter"),u(),d(6,"mat-select",20,2),$("selectionChange",function(){ne(e),T();let i=Lt(11),o=T();return ae(o.pathFormGroup().controls.path.setValue(i.value))}),d(8,"mat-option"),c(9,"All"),u(),ye(10,Z0,2,3,"mat-option",16,Re),u()()()}if(n&2){let e=Lt(7),t=T(2);f(3),P(e.value?4:3),f(3),R("formControl",t.pathSkUnitsFilterControl),f(4),Ae(t.pathSkUnitsFiltersList)}}function J0(n,a){n&1&&(d(0,"span",8),c(1,"(optional)"),u())}function ev(n,a){n&1&&(d(0,"mat-hint"),c(1,"Leave blank to disable this path."),u())}function tv(n,a){if(n&1){let e=we();d(0,"button",21),$("click",function(){ne(e);let i=T(2);return ae(i.pathFormGroup().controls.path.setValue(""))}),d(1,"mat-icon"),c(2,"close"),u()()}}function iv(n,a){n&1&&(d(0,"mat-error"),c(1," Path is required. Please enter a valid Signal K path. "),u())}function nv(n,a){n&1&&(d(0,"mat-error"),c(1," Path not recognized. Please enter a path from the server's published list. "),u())}function av(n,a){if(n&1&&(d(0,"span"),c(1),u(),O(2,"br"),d(3,"small",22),c(4),u()),n&2){let e=T().$implicit;f(),Q(e.path),f(3),Q(e.meta.description)}}function ov(n,a){if(n&1&&c(0),n&2){let e=T().$implicit;be(" ",e.path," ")}}function rv(n,a){if(n&1&&(d(0,"mat-option",11),I(1,av,5,2)(2,ov,1,1),u()),n&2){let e=a.$implicit;R("value",e.path),f(),P(e.meta!==void 0?1:2)}}function sv(n,a){if(n&1&&(d(0,"mat-option",16),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),be(" ",e," ")}}function lv(n,a){if(n&1&&(d(0,"mat-option",16),c(1),u()),n&2){let e=a.$implicit;R("value",e.measure),f(),be(" ",e.description," ")}}function dv(n,a){if(n&1&&(d(0,"mat-optgroup",28),ye(1,lv,2,2,"mat-option",16,Re),u()),n&2){let e=a.$implicit;R("label",e.group),f(),Ae(e.units)}}function cv(n,a){if(n&1&&(d(0,"mat-form-field",26)(1,"mat-label"),c(2,"Display Format"),u(),d(3,"mat-select",27),ye(4,dv,3,1,"mat-optgroup",28,Re),u()()),n&2){let e=T(3);f(4),Ae(e.unitList.conversions)}}function uv(n,a){if(n&1&&(d(0,"div",23)(1,"mat-form-field",14)(2,"mat-label"),c(3,"Sample Time"),u(),O(4,"input",24),u()(),d(5,"div",25),I(6,cv,6,0,"mat-form-field",26),u()),n&2){let e=T(2);f(6),P(e.pathFormGroup().value.pathType==="number"&&e.pathFormGroup().value.showConvertUnitTo===void 0||e.pathFormGroup().value.pathType==="number"&&e.pathFormGroup().value.showConvertUnitTo===!0?6:-1)}}function mv(n,a){if(n&1&&(d(0,"div",3)(1,"div",4)(2,"span"),c(3),u()(),I(4,Q0,12,2,"div",5),d(5,"div",6)(6,"mat-form-field",7)(7,"mat-label"),c(8," Signal K Path "),I(9,J0,2,0,"span",8),u(),O(10,"input",9,0),I(12,ev,2,0,"mat-hint"),I(13,tv,3,0,"button",10),I(14,iv,2,0,"mat-error")(15,nv,2,0,"mat-error"),d(16,"mat-autocomplete",null,1),ye(18,rv,3,2,"mat-option",11,Y0),ut(20,"async"),u()()(),d(21,"div",12)(22,"div",13)(23,"mat-form-field",14)(24,"mat-label"),c(25,"Data Source"),u(),d(26,"mat-select",15),ye(27,sv,2,2,"mat-option",16,Re),u()()(),I(29,uv,7,1),u()()),n&2){let e,t=Lt(17),i=T();R("formGroup",i.pathFormGroup()),f(2),Te("color",i.pathFormGroup().enabled?"":"rgba(255,255,255,0.5)"),f(),Q(i.pathFormGroup().value.description),f(),P(i.pathFormGroup().value.pathType==="number"&&i.showPathSkUnitsFilter?4:-1),f(5),P(i.pathFormGroup().value.pathRequired===!1?9:-1),f(),R("matAutocomplete",t),f(2),P(i.pathFormGroup().value.pathRequired===!1?12:-1),f(),P(i.pathFormGroup().value.path?13:-1),f(),P((e=i.pathFormGroup().controls.path.errors)!=null&&e.required?14:(e=i.pathFormGroup().controls.path.errors)!=null&&e.requireMatch?15:-1),f(4),Ae(Et(20,11,i.filteredPaths)),f(9),Ae(i.availableSources),f(2),P(i.pathFormGroup().value.zonesOnlyPaths?-1:29)}}function hv(n){return a=>{let e=a.parent?.value?.pathRequired!==!1,t=a.value;return e?t===null||t===""?{requireMatch:!0}:n().some(r=>r.path===t)?null:{requireMatch:!0}:t===null||t===""||n().some(r=>r.path===t)?null:{requireMatch:!0}}}var bm=(()=>{class n{_data=A(st);_units=A(He);_connection=A(cs);_destroyRef=A(Ie);pathFormGroup=x.required();multiCTRLArray=x.required();filterSelfPaths=x.required();availablePaths;filteredPaths=new sn(null);availableSources;unitList={base:"",conversions:[]};showPathSkUnitsFilter=!1;pathSkUnitsFilterControl=new ku(null);pathSkUnitsFiltersList;unitlessUnit={unit:"unitless",properties:{display:"(null)",quantity:"Unitless",quantityDisplay:"(null)",description:""}};ngOnInit(){let e=this.pathFormGroup();e.controls.path.disabled||(this.pathSkUnitsFiltersList=this._units.skBaseUnits.sort((t,i)=>t.properties.quantity>i.properties.quantity?1:-1),this.pathSkUnitsFiltersList.unshift(this.unitlessUnit),e.value.pathSkUnitsFilter&&this.pathSkUnitsFilterControl.setValue(this.pathSkUnitsFiltersList.find(t=>t.unit===this.pathFormGroup().value.pathSkUnitsFilter),{onlySelf:!0}),e.value.showPathSkUnitsFilter&&(this.showPathSkUnitsFilter=e.value.showPathSkUnitsFilter),e.controls.path.setValidators([hv(()=>this.getPaths())]),e.controls.path.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),e.controls.pathRequired&&e.controls.pathRequired.valueChanges.pipe(De(this._destroyRef)).subscribe(()=>{this.pathFormGroup().controls.path.updateValueAndValidity()}),e.controls.path.valid?this.enableFormFields(!1):this.disablePathFields(),e.controls.sampleTime||(e.addControl("sampleTime",new We("500",mt.required)),e.controls.sampleTime.updateValueAndValidity({onlySelf:!0,emitEvent:!1})),e.controls.path.valueChanges.pipe(wc(t=>t===""?xa(0):xa(350)),to(""),si(t=>this.filterPaths(t||""))).pipe(De(this._destroyRef)).subscribe(()=>{let t=this.pathFormGroup();t.controls.path.pristine||(t.controls.path.valid?(this.enableFormFields(!0),this.updatePathMetaBoundDisplayName(t.controls.path.value),this.updatePathMetaBoundDisplayScale(t.controls.path.value)):this.disablePathFields())}),e.controls.pathType.valueChanges.pipe(De(this._destroyRef)).subscribe(()=>{let t=this.pathFormGroup();t.value.showPathSkUnitsFilter?this.pathSkUnitsFilterControl.setValue(this.unitlessUnit):this.pathSkUnitsFilterControl.setValue(null),t.controls.path.updateValueAndValidity()}))}ngOnChanges(e){e.filterSelfPaths&&!e.filterSelfPaths.firstChange&&this.pathFormGroup().controls.path.updateValueAndValidity()}getPaths(){let e=this.pathFormGroup().controls.pathType.value,t=this.filterSelfPaths(),i=!1,o=this.pathFormGroup();if(o.value.supportsPut){let s=!1;this.multiCTRLArray().length>0&&(s=this.multiCTRLArray().some(l=>l.pathID===this.pathFormGroup().value.pathID&&l.type==="3")),s?i=!1:i=vu(this._connection.skServerVersion,"2.12.0",">=")?o.value.supportsPut:!1}let r=o.value.zonesOnlyPaths??!1;return this._data.getPathsAndMetaByType(e,i,r,t).sort()}filterPaths(e){let t=e.toLowerCase(),i=this.getPaths();if(this.pathSkUnitsFilterControl.value){let o=this.pathSkUnitsFilterControl.value.unit;i=i.filter(r=>{let s=!!r.meta&&!!r.meta.units,l=o==="unitless";return s&&r.meta.units===o||!s&&l})}i=i.filter(o=>o.path.toLowerCase().includes(t)),this.filteredPaths.next(i)}enableFormFields(e){let t=this._data.getPathObject(this.pathFormGroup().controls.path.value);if(t!=null){this.pathFormGroup().controls.sampleTime.enable({onlySelf:!1});let i=this.pathFormGroup();i.controls.pathType.value=="number"&&(this.unitList=this._units.getConversionsForPath(i.controls.path.value),e&&i.controls.convertUnitTo.setValue(this.unitList.base,{onlySelf:!0}),i.controls.convertUnitTo.enable({onlySelf:!1})),Object.keys(t.sources).length==1?(this.availableSources=["default"],e?i.controls.source.value!="default"&&i.controls.source.setValue("default",{onlySelf:!0}):i.controls.source.value!="default"&&i.controls.source.setValue("",{onlySelf:!0})):Object.keys(t.sources).length>1&&(this.availableSources=Object.keys(t.sources),i.controls.source.value=="default"&&i.controls.source.reset()),i.controls.source.enable({onlySelf:!1})}else this.disablePathFields()}disablePathFields(){this.pathFormGroup().controls.source.reset("",{onlySelf:!0}),this.pathFormGroup().controls.source.disable({onlySelf:!1}),this.pathFormGroup().controls.sampleTime.disable({onlySelf:!1});let e=this.pathFormGroup();e.controls.pathType.value=="number"&&(e.controls.convertUnitTo.reset("",{onlySelf:!0}),e.controls.convertUnitTo.disable({onlySelf:!1}))}updatePathMetaBoundDisplayName(e){let t=this.pathFormGroup();if(!Object.prototype.hasOwnProperty.call(t.parent.parent.value,"displayName"))return;let i=this._data.getPathMeta(e);i?.displayName&&t.parent.parent.controls.displayName.setValue(i.displayName)}updatePathMetaBoundDisplayScale(e){let t=this.pathFormGroup();if(!Object.prototype.hasOwnProperty.call(t.parent.parent.value,"displayScale"))return;let i=this._data.getPathMeta(e);if(i?.displayScale){let o=t.parent.parent.get("displayScale"),r=t.controls.convertUnitTo.value;i.displayScale.lower!==null&&i.displayScale.lower!==void 0&&o.controls.lower.setValue(this._units.convertToUnit(r,i.displayScale.lower)),i.displayScale.upper!==null&&i.displayScale.upper!==void 0&&o.controls.upper.setValue(this._units.convertToUnit(r,i.displayScale.upper)),i.displayScale.type!==null&&i.displayScale.type!==void 0&&o.controls.type.setValue(i.displayScale.type),i.displayScale.power!==null&&i.displayScale.power!==void 0&&o.controls.power.setValue(i.displayScale.power)}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["path-control-config"]],inputs:{pathFormGroup:[1,"pathFormGroup"],multiCTRLArray:[1,"multiCTRLArray"],filterSelfPaths:[1,"filterSelfPaths"]},features:[dn],decls:1,vars:1,consts:[["pathInput",""],["pathAutoComplete","matAutocomplete"],["pathUnitsFilter",""],[1,"flex-container","rounded-card","rounded-card-color",3,"formGroup"],[1,"flex-field-100"],[1,"flex-field-fixed"],[1,"flex-field-to-100"],["floatLabel","auto","appearance","fill",1,"pathField"],[1,"optional-label"],["type","text","matInput","","placeholder","Type to use autocomplete or select from list","formControlName","path",3,"matAutocomplete"],["mat-icon-button","","matIconSuffix","","aria-label","Clear"],[2,"min-height","48px","line-height","1.15","height","auto","padding","8px 16px","white-space","normal",3,"value"],[1,"pathProperties"],[1,"sourceField"],["appearance","outline","floatLabel","always",1,"fields"],["placeholder","Select source","formControlName","source","required",""],[3,"value"],["floatLabel","auto","appearance","fill",1,"filter-path"],[1,"fa-solid","fa-filter"],[1,"fa-solid","fa-filter-circle-xmark"],["panelWidth","",3,"selectionChange","formControl"],["mat-icon-button","","matIconSuffix","","aria-label","Clear",3,"click"],[1,"pathMetaDescription"],[1,"sampleTimeField"],["matInput","","type","number","placeholder","Sample time in milliseconds","formControlName","sampleTime","required",""],[1,"unitField"],[1,"fields"],["placeholder","Select unit","formControlName","convertUnitTo","required",""],[3,"label"]],template:function(t,i){t&1&&I(0,mv,30,13,"div",3),t&2&&P(i.pathFormGroup().value.isPathConfigurable?0:-1)},dependencies:[Ot,bt,Oi,ot,Mt,Pt,yt,Vi,rt,Jt,Ct,At,xt,Ts,_o,Rt,mo,Ra,_t,Jn,Qn,jt,Xe,je,Du,as],styles:[".pathGroup[_ngcontent-%COMP%]{width:100%}.pathGroupFields[_ngcontent-%COMP%]{display:block;width:calc(100% - 5px)}.pathField[_ngcontent-%COMP%]{width:100%}.pathProperties[_ngcontent-%COMP%]{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:center;align-content:flex-start;gap:10px}.fields[_ngcontent-%COMP%]{width:100%}.sourceField[_ngcontent-%COMP%]{flex:3 1}.sampleTimeField[_ngcontent-%COMP%]{flex:1 3}.unitField[_ngcontent-%COMP%]{flex:3 1}"]})}return n})();function pv(n,a){if(n&1&&O(0,"path-control-config",6),n&2){let e=a.$implicit,t=T(2);R("pathFormGroup",e)("filterSelfPaths",t.filterSelfPaths().value)("multiCTRLArray",t.multiCTRLArray)}}function gv(n,a){if(n&1&&ye(0,pv,1,3,"path-control-config",6,Re),n&2){let e=T();Ae(e.pathsFormGroup.controls)}}function fv(n,a){if(n&1&&O(0,"path-control-config",6),n&2){let e=a.$implicit,t=T(2);R("pathFormGroup",t.pathsFormGroup.get(e))("filterSelfPaths",t.filterSelfPaths().value)("multiCTRLArray",t.multiCTRLArray)}}function vv(n,a){if(n&1&&(ye(0,fv,1,3,"path-control-config",6,Re),ut(2,"objectKeys")),n&2){let e=T();Ae(Et(2,0,e.pathsFormGroup.controls))}}var ym=(()=>{class n{rootFormGroup=A(rt);fb=A(Zn);formGroupName=x.required();isArray=x.required();enableTimeout=x.required();dataTimeout=x.required();filterSelfPaths=x.required();addPathEvent=x(void 0);delPathEvent=x(void 0);updatePathEvent=x(void 0);pathsFormGroup;multiCTRLArray=[];ngOnInit(){this.isArray()?(this.pathsFormGroup=this.rootFormGroup.control.get(this.formGroupName()),this.multiCTRLArray=this.rootFormGroup.control.get("multiChildCtrls").value):this.pathsFormGroup=this.rootFormGroup.control.get(this.formGroupName())}addPath(e){this.pathsFormGroup.push(this.fb.group({description:[e.path.description],path:[e.path.path,mt.required],pathID:[e.path.pathID],source:[e.path.source,mt.required],pathType:[e.path.pathType],zonesOnlyPaths:[e.path.zonesOnlyPaths??!1],isPathConfigurable:[e.path.isPathConfigurable],showPathSkUnitsFilter:[e.path.showPathSkUnitsFilter],pathSkUnitsFilter:[e.path.pathSkUnitsFilter],convertUnitTo:[e.path.convertUnitTo],sampleTime:[e.path.sampleTime],supportsPut:[e.path.supportsPut]})),this.pathsFormGroup.updateValueAndValidity(),this.multiCTRLArray=this.rootFormGroup.control.get("multiChildCtrls").value}delPath(){this.multiCTRLArray=this.rootFormGroup.control.get("multiChildCtrls").value}updatePath(e){this.multiCTRLArray=e}ngOnChanges(e){e.addPathEvent&&!e.addPathEvent.firstChange&&this.addPath(e.addPathEvent.currentValue),e.delPathEvent&&!e.delPathEvent.firstChange&&this.delPath(),e.updatePathEvent&&!e.updatePathEvent.firstChange&&this.updatePath(e.updatePathEvent.currentValue)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["paths-options"]],inputs:{formGroupName:[1,"formGroupName"],isArray:[1,"isArray"],enableTimeout:[1,"enableTimeout"],dataTimeout:[1,"dataTimeout"],filterSelfPaths:[1,"filterSelfPaths"],addPathEvent:[1,"addPathEvent"],delPathEvent:[1,"delPathEvent"],updatePathEvent:[1,"updatePathEvent"]},features:[dn],decls:14,vars:5,consts:[[1,"widget-options-grid"],["name","enableTimeout",3,"formControl"],["type","number","matNativeControl","","placeholder","Time in seconds...","name","dataTimeout","min","2","required","",3,"formControl"],["matTextSuffix",""],[3,"formGroup"],["name","filterSelfPaths",3,"formControl"],[2,"display","block",3,"pathFormGroup","filterSelfPaths","multiCTRLArray"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"mat-checkbox",1),c(2," Enable Widget Data TTL "),u(),d(3,"mat-form-field")(4,"mat-label"),c(5,"TTL Timeout For Paths"),u(),O(6,"input",2),d(7,"span",3),c(8,"Seconds"),u()()(),un(9,4),I(10,gv,2,0)(11,vv,3,2),mn(),d(12,"mat-checkbox",5),c(13,` Restrict to own vessel
43
+ `),u()),t&2&&(f(),R("formControl",i.enableTimeout()),f(5),R("formControl",i.dataTimeout()),f(3),R("formGroup",i.pathsFormGroup),f(),P(i.isArray()?10:11),f(2),R("formControl",i.filterSelfPaths()))},dependencies:[ei,Ot,bt,Oi,ot,Mt,Pt,vn,yt,Vi,rt,Ct,At,xt,Jn,bm,vm],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;padding-top:15px;padding-bottom:5px}"]})}return n})();function bv(n,a){if(n&1){let e=we();d(0,"button",7),$("click",function(){ne(e);let i=T();return ae(i.dateTimezone().setValue(""))}),O(1,"span",8),u()}}function yv(n,a){if(n&1&&(d(0,"mat-option",6),c(1),u()),n&2){let e=a.$implicit;R("value",e.label),f(),Ut(" ",e.offset," - ",e.label," ")}}function Av(n){return a=>n.some(t=>t.label===a.value)?null:{requireMatch:!0}}var Cv=()=>{let n=Intl.supportedValuesOf("timeZone"),a=new Date;return n.map(e=>({offset:new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(a).find(r=>r.type==="timeZoneName")?.value||"",label:e}))},Am=(()=>{class n{_destroyRef=A(Ie);dateFormat=x(void 0);dateTimezone=x(void 0);tz=[];filteredTZ;filteredTZSubscription=null;constructor(){}ngOnInit(){typeof Intl.supportedValuesOf<"u"?this.tz=Cv().sort((e,t)=>this.compareOffsets(e.offset,t.offset)):(console.log("[Widget Options] Feature not supported. Using static Time Zone list"),this.tz=[{offset:"GMT",label:"Africa/Abidjan"},{offset:"GMT",label:"Africa/Accra"},{offset:"GMT+3",label:"Africa/Addis_Ababa"},{offset:"GMT+1",label:"Africa/Algiers"},{offset:"GMT+3",label:"Africa/Asmera"},{offset:"GMT",label:"Africa/Bamako"},{offset:"GMT+1",label:"Africa/Bangui"},{offset:"GMT",label:"Africa/Banjul"},{offset:"GMT",label:"Africa/Bissau"},{offset:"GMT+2",label:"Africa/Blantyre"},{offset:"GMT+1",label:"Africa/Brazzaville"},{offset:"GMT+2",label:"Africa/Bujumbura"},{offset:"GMT+2",label:"Africa/Cairo"},{offset:"GMT",label:"Africa/Casablanca"},{offset:"GMT+2",label:"Africa/Ceuta"},{offset:"GMT",label:"Africa/Conakry"},{offset:"GMT",label:"Africa/Dakar"},{offset:"GMT+3",label:"Africa/Dar_es_Salaam"},{offset:"GMT+3",label:"Africa/Djibouti"},{offset:"GMT+1",label:"Africa/Douala"},{offset:"GMT",label:"Africa/El_Aaiun"},{offset:"GMT",label:"Africa/Freetown"},{offset:"GMT+2",label:"Africa/Gaborone"},{offset:"GMT+2",label:"Africa/Harare"},{offset:"GMT+2",label:"Africa/Johannesburg"},{offset:"GMT+2",label:"Africa/Juba"},{offset:"GMT+3",label:"Africa/Kampala"},{offset:"GMT+2",label:"Africa/Khartoum"},{offset:"GMT+2",label:"Africa/Kigali"},{offset:"GMT+1",label:"Africa/Kinshasa"},{offset:"GMT+1",label:"Africa/Lagos"},{offset:"GMT+1",label:"Africa/Libreville"},{offset:"GMT",label:"Africa/Lome"},{offset:"GMT+1",label:"Africa/Luanda"},{offset:"GMT+2",label:"Africa/Lubumbashi"},{offset:"GMT+2",label:"Africa/Lusaka"},{offset:"GMT+1",label:"Africa/Malabo"},{offset:"GMT+2",label:"Africa/Maputo"},{offset:"GMT+2",label:"Africa/Maseru"},{offset:"GMT+2",label:"Africa/Mbabane"},{offset:"GMT+3",label:"Africa/Mogadishu"},{offset:"GMT",label:"Africa/Monrovia"},{offset:"GMT+3",label:"Africa/Nairobi"},{offset:"GMT+1",label:"Africa/Ndjamena"},{offset:"GMT+1",label:"Africa/Niamey"},{offset:"GMT",label:"Africa/Nouakchott"},{offset:"GMT",label:"Africa/Ouagadougou"},{offset:"GMT+1",label:"Africa/Porto-Novo"},{offset:"GMT",label:"Africa/Sao_Tome"},{offset:"GMT+2",label:"Africa/Tripoli"},{offset:"GMT+1",label:"Africa/Tunis"},{offset:"GMT+2",label:"Africa/Windhoek"},{offset:"GMT-9",label:"America/Adak"},{offset:"GMT-8",label:"America/Anchorage"},{offset:"GMT-4",label:"America/Anguilla"},{offset:"GMT-4",label:"America/Antigua"},{offset:"GMT-3",label:"America/Araguaina"},{offset:"GMT-3",label:"America/Argentina/La_Rioja"},{offset:"GMT-3",label:"America/Argentina/Rio_Gallegos"},{offset:"GMT-3",label:"America/Argentina/Salta"},{offset:"GMT-3",label:"America/Argentina/San_Juan"},{offset:"GMT-3",label:"America/Argentina/San_Luis"},{offset:"GMT-3",label:"America/Argentina/Tucuman"},{offset:"GMT-3",label:"America/Argentina/Ushuaia"},{offset:"GMT-4",label:"America/Aruba"},{offset:"GMT-3",label:"America/Asuncion"},{offset:"GMT-3",label:"America/Bahia"},{offset:"GMT-6",label:"America/Bahia_Banderas"},{offset:"GMT-4",label:"America/Barbados"},{offset:"GMT-3",label:"America/Belem"},{offset:"GMT-6",label:"America/Belize"},{offset:"GMT-4",label:"America/Blanc-Sablon"},{offset:"GMT-4",label:"America/Boa_Vista"},{offset:"GMT-5",label:"America/Bogota"},{offset:"GMT-6",label:"America/Boise"},{offset:"GMT-3",label:"America/Buenos_Aires"},{offset:"GMT-6",label:"America/Cambridge_Bay"},{offset:"GMT-4",label:"America/Campo_Grande"},{offset:"GMT-5",label:"America/Cancun"},{offset:"GMT-4",label:"America/Caracas"},{offset:"GMT-3",label:"America/Catamarca"},{offset:"GMT-3",label:"America/Cayenne"},{offset:"GMT-5",label:"America/Cayman"},{offset:"GMT-5",label:"America/Chicago"},{offset:"GMT-6",label:"America/Chihuahua"},{offset:"GMT-6",label:"America/Ciudad_Juarez"},{offset:"GMT-5",label:"America/Coral_Harbour"},{offset:"GMT-3",label:"America/Cordoba"},{offset:"GMT-6",label:"America/Costa_Rica"},{offset:"GMT-7",label:"America/Creston"},{offset:"GMT-4",label:"America/Cuiaba"},{offset:"GMT-4",label:"America/Curacao"},{offset:"GMT",label:"America/Danmarkshavn"},{offset:"GMT-7",label:"America/Dawson"},{offset:"GMT-7",label:"America/Dawson_Creek"},{offset:"GMT-6",label:"America/Denver"},{offset:"GMT-4",label:"America/Detroit"},{offset:"GMT-4",label:"America/Dominica"},{offset:"GMT-6",label:"America/Edmonton"},{offset:"GMT-5",label:"America/Eirunepe"},{offset:"GMT-6",label:"America/El_Salvador"},{offset:"GMT-7",label:"America/Fort_Nelson"},{offset:"GMT-3",label:"America/Fortaleza"},{offset:"GMT-3",label:"America/Glace_Bay"},{offset:"GMT-1",label:"America/Godthab"},{offset:"GMT-3",label:"America/Goose_Bay"},{offset:"GMT-4",label:"America/Grand_Turk"},{offset:"GMT-4",label:"America/Grenada"},{offset:"GMT-4",label:"America/Guadeloupe"},{offset:"GMT-6",label:"America/Guatemala"},{offset:"GMT-5",label:"America/Guayaquil"},{offset:"GMT-4",label:"America/Guyana"},{offset:"GMT-3",label:"America/Halifax"},{offset:"GMT-4",label:"America/Havana"},{offset:"GMT-7",label:"America/Hermosillo"},{offset:"GMT-5",label:"America/Indiana/Knox"},{offset:"GMT-4",label:"America/Indiana/Marengo"},{offset:"GMT-4",label:"America/Indiana/Petersburg"},{offset:"GMT-5",label:"America/Indiana/Tell_City"},{offset:"GMT-4",label:"America/Indiana/Vevay"},{offset:"GMT-4",label:"America/Indiana/Vincennes"},{offset:"GMT-4",label:"America/Indiana/Winamac"},{offset:"GMT-4",label:"America/Indianapolis"},{offset:"GMT-6",label:"America/Inuvik"},{offset:"GMT-4",label:"America/Iqaluit"},{offset:"GMT-5",label:"America/Jamaica"},{offset:"GMT-3",label:"America/Jujuy"},{offset:"GMT-8",label:"America/Juneau"},{offset:"GMT-4",label:"America/Kentucky/Monticello"},{offset:"GMT-4",label:"America/Kralendijk"},{offset:"GMT-4",label:"America/La_Paz"},{offset:"GMT-5",label:"America/Lima"},{offset:"GMT-7",label:"America/Los_Angeles"},{offset:"GMT-4",label:"America/Louisville"},{offset:"GMT-4",label:"America/Lower_Princes"},{offset:"GMT-3",label:"America/Maceio"},{offset:"GMT-6",label:"America/Managua"},{offset:"GMT-4",label:"America/Manaus"},{offset:"GMT-4",label:"America/Marigot"},{offset:"GMT-4",label:"America/Martinique"},{offset:"GMT-5",label:"America/Matamoros"},{offset:"GMT-7",label:"America/Mazatlan"},{offset:"GMT-3",label:"America/Mendoza"},{offset:"GMT-5",label:"America/Menominee"},{offset:"GMT-6",label:"America/Merida"},{offset:"GMT-8",label:"America/Metlakatla"},{offset:"GMT-6",label:"America/Mexico_City"},{offset:"GMT-2",label:"America/Miquelon"},{offset:"GMT-3",label:"America/Moncton"},{offset:"GMT-6",label:"America/Monterrey"},{offset:"GMT-3",label:"America/Montevideo"},{offset:"GMT-4",label:"America/Montserrat"},{offset:"GMT-4",label:"America/Nassau"},{offset:"GMT-4",label:"America/New_York"},{offset:"GMT-8",label:"America/Nome"},{offset:"GMT-2",label:"America/Noronha"},{offset:"GMT-5",label:"America/North_Dakota/Beulah"},{offset:"GMT-5",label:"America/North_Dakota/Center"},{offset:"GMT-5",label:"America/North_Dakota/New_Salem"},{offset:"GMT-5",label:"America/Ojinaga"},{offset:"GMT-5",label:"America/Panama"},{offset:"GMT-3",label:"America/Paramaribo"},{offset:"GMT-7",label:"America/Phoenix"},{offset:"GMT-4",label:"America/Port-au-Prince"},{offset:"GMT-4",label:"America/Port_of_Spain"},{offset:"GMT-4",label:"America/Porto_Velho"},{offset:"GMT-4",label:"America/Puerto_Rico"},{offset:"GMT-3",label:"America/Punta_Arenas"},{offset:"GMT-5",label:"America/Rankin_Inlet"},{offset:"GMT-3",label:"America/Recife"},{offset:"GMT-6",label:"America/Regina"},{offset:"GMT-5",label:"America/Resolute"},{offset:"GMT-5",label:"America/Rio_Branco"},{offset:"GMT-3",label:"America/Santarem"},{offset:"GMT-3",label:"America/Santiago"},{offset:"GMT-4",label:"America/Santo_Domingo"},{offset:"GMT-3",label:"America/Sao_Paulo"},{offset:"GMT-1",label:"America/Scoresbysund"},{offset:"GMT-8",label:"America/Sitka"},{offset:"GMT-4",label:"America/St_Barthelemy"},{offset:"GMT-2:30",label:"America/St_Johns"},{offset:"GMT-4",label:"America/St_Kitts"},{offset:"GMT-4",label:"America/St_Lucia"},{offset:"GMT-4",label:"America/St_Thomas"},{offset:"GMT-4",label:"America/St_Vincent"},{offset:"GMT-6",label:"America/Swift_Current"},{offset:"GMT-6",label:"America/Tegucigalpa"},{offset:"GMT-3",label:"America/Thule"},{offset:"GMT-7",label:"America/Tijuana"},{offset:"GMT-4",label:"America/Toronto"},{offset:"GMT-4",label:"America/Tortola"},{offset:"GMT-7",label:"America/Vancouver"},{offset:"GMT-7",label:"America/Whitehorse"},{offset:"GMT-5",label:"America/Winnipeg"},{offset:"GMT-8",label:"America/Yakutat"},{offset:"GMT+8",label:"Antarctica/Casey"},{offset:"GMT+7",label:"Antarctica/Davis"},{offset:"GMT+10",label:"Antarctica/DumontDUrville"},{offset:"GMT+11",label:"Antarctica/Macquarie"},{offset:"GMT+5",label:"Antarctica/Mawson"},{offset:"GMT+13",label:"Antarctica/McMurdo"},{offset:"GMT-3",label:"Antarctica/Palmer"},{offset:"GMT-3",label:"Antarctica/Rothera"},{offset:"GMT+3",label:"Antarctica/Syowa"},{offset:"GMT+2",label:"Antarctica/Troll"},{offset:"GMT+5",label:"Antarctica/Vostok"},{offset:"GMT+2",label:"Arctic/Longyearbyen"},{offset:"GMT+3",label:"Asia/Aden"},{offset:"GMT+5",label:"Asia/Almaty"},{offset:"GMT+3",label:"Asia/Amman"},{offset:"GMT+12",label:"Asia/Anadyr"},{offset:"GMT+5",label:"Asia/Aqtau"},{offset:"GMT+5",label:"Asia/Aqtobe"},{offset:"GMT+5",label:"Asia/Ashgabat"},{offset:"GMT+5",label:"Asia/Atyrau"},{offset:"GMT+3",label:"Asia/Baghdad"},{offset:"GMT+3",label:"Asia/Bahrain"},{offset:"GMT+4",label:"Asia/Baku"},{offset:"GMT+7",label:"Asia/Bangkok"},{offset:"GMT+7",label:"Asia/Barnaul"},{offset:"GMT+3",label:"Asia/Beirut"},{offset:"GMT+6",label:"Asia/Bishkek"},{offset:"GMT+8",label:"Asia/Brunei"},{offset:"GMT+5:30",label:"Asia/Calcutta"},{offset:"GMT+9",label:"Asia/Chita"},{offset:"GMT+5:30",label:"Asia/Colombo"},{offset:"GMT+3",label:"Asia/Damascus"},{offset:"GMT+6",label:"Asia/Dhaka"},{offset:"GMT+9",label:"Asia/Dili"},{offset:"GMT+4",label:"Asia/Dubai"},{offset:"GMT+5",label:"Asia/Dushanbe"},{offset:"GMT+3",label:"Asia/Famagusta"},{offset:"GMT+2",label:"Asia/Gaza"},{offset:"GMT+2",label:"Asia/Hebron"},{offset:"GMT+8",label:"Asia/Hong_Kong"},{offset:"GMT+7",label:"Asia/Hovd"},{offset:"GMT+8",label:"Asia/Irkutsk"},{offset:"GMT+7",label:"Asia/Jakarta"},{offset:"GMT+9",label:"Asia/Jayapura"},{offset:"GMT+3",label:"Asia/Jerusalem"},{offset:"GMT+4:30",label:"Asia/Kabul"},{offset:"GMT+12",label:"Asia/Kamchatka"},{offset:"GMT+5",label:"Asia/Karachi"},{offset:"GMT+5:45",label:"Asia/Katmandu"},{offset:"GMT+9",label:"Asia/Khandyga"},{offset:"GMT+7",label:"Asia/Krasnoyarsk"},{offset:"GMT+8",label:"Asia/Kuala_Lumpur"},{offset:"GMT+8",label:"Asia/Kuching"},{offset:"GMT+3",label:"Asia/Kuwait"},{offset:"GMT+8",label:"Asia/Macau"},{offset:"GMT+11",label:"Asia/Magadan"},{offset:"GMT+8",label:"Asia/Makassar"},{offset:"GMT+8",label:"Asia/Manila"},{offset:"GMT+4",label:"Asia/Muscat"},{offset:"GMT+3",label:"Asia/Nicosia"},{offset:"GMT+7",label:"Asia/Novokuznetsk"},{offset:"GMT+7",label:"Asia/Novosibirsk"},{offset:"GMT+6",label:"Asia/Omsk"},{offset:"GMT+5",label:"Asia/Oral"},{offset:"GMT+7",label:"Asia/Phnom_Penh"},{offset:"GMT+7",label:"Asia/Pontianak"},{offset:"GMT+9",label:"Asia/Pyongyang"},{offset:"GMT+3",label:"Asia/Qatar"},{offset:"GMT+5",label:"Asia/Qostanay"},{offset:"GMT+5",label:"Asia/Qyzylorda"},{offset:"GMT+6:30",label:"Asia/Rangoon"},{offset:"GMT+3",label:"Asia/Riyadh"},{offset:"GMT+7",label:"Asia/Saigon"},{offset:"GMT+11",label:"Asia/Sakhalin"},{offset:"GMT+5",label:"Asia/Samarkand"},{offset:"GMT+9",label:"Asia/Seoul"},{offset:"GMT+8",label:"Asia/Shanghai"},{offset:"GMT+8",label:"Asia/Singapore"},{offset:"GMT+11",label:"Asia/Srednekolymsk"},{offset:"GMT+8",label:"Asia/Taipei"},{offset:"GMT+5",label:"Asia/Tashkent"},{offset:"GMT+4",label:"Asia/Tbilisi"},{offset:"GMT+3:30",label:"Asia/Tehran"},{offset:"GMT+6",label:"Asia/Thimphu"},{offset:"GMT+9",label:"Asia/Tokyo"},{offset:"GMT+7",label:"Asia/Tomsk"},{offset:"GMT+8",label:"Asia/Ulaanbaatar"},{offset:"GMT+6",label:"Asia/Urumqi"},{offset:"GMT+10",label:"Asia/Ust-Nera"},{offset:"GMT+7",label:"Asia/Vientiane"},{offset:"GMT+10",label:"Asia/Vladivostok"},{offset:"GMT+9",label:"Asia/Yakutsk"},{offset:"GMT+5",label:"Asia/Yekaterinburg"},{offset:"GMT+4",label:"Asia/Yerevan"},{offset:"GMT",label:"Atlantic/Azores"},{offset:"GMT-3",label:"Atlantic/Bermuda"},{offset:"GMT+1",label:"Atlantic/Canary"},{offset:"GMT-1",label:"Atlantic/Cape_Verde"},{offset:"GMT+1",label:"Atlantic/Faeroe"},{offset:"GMT+1",label:"Atlantic/Madeira"},{offset:"GMT",label:"Atlantic/Reykjavik"},{offset:"GMT-2",label:"Atlantic/South_Georgia"},{offset:"GMT",label:"Atlantic/St_Helena"},{offset:"GMT-3",label:"Atlantic/Stanley"},{offset:"GMT+10:30",label:"Australia/Adelaide"},{offset:"GMT+10",label:"Australia/Brisbane"},{offset:"GMT+10:30",label:"Australia/Broken_Hill"},{offset:"GMT+9:30",label:"Australia/Darwin"},{offset:"GMT+8:45",label:"Australia/Eucla"},{offset:"GMT+11",label:"Australia/Hobart"},{offset:"GMT+10",label:"Australia/Lindeman"},{offset:"GMT+11",label:"Australia/Lord_Howe"},{offset:"GMT+11",label:"Australia/Melbourne"},{offset:"GMT+8",label:"Australia/Perth"},{offset:"GMT+11",label:"Australia/Sydney"},{offset:"GMT+2",label:"Europe/Amsterdam"},{offset:"GMT+2",label:"Europe/Andorra"},{offset:"GMT+4",label:"Europe/Astrakhan"},{offset:"GMT+3",label:"Europe/Athens"},{offset:"GMT+2",label:"Europe/Belgrade"},{offset:"GMT+2",label:"Europe/Berlin"},{offset:"GMT+2",label:"Europe/Bratislava"},{offset:"GMT+2",label:"Europe/Brussels"},{offset:"GMT+3",label:"Europe/Bucharest"},{offset:"GMT+2",label:"Europe/Budapest"},{offset:"GMT+2",label:"Europe/Busingen"},{offset:"GMT+3",label:"Europe/Chisinau"},{offset:"GMT+2",label:"Europe/Copenhagen"},{offset:"GMT+1",label:"Europe/Dublin"},{offset:"GMT+2",label:"Europe/Gibraltar"},{offset:"GMT+1",label:"Europe/Guernsey"},{offset:"GMT+3",label:"Europe/Helsinki"},{offset:"GMT+1",label:"Europe/Isle_of_Man"},{offset:"GMT+3",label:"Europe/Istanbul"},{offset:"GMT+1",label:"Europe/Jersey"},{offset:"GMT+2",label:"Europe/Kaliningrad"},{offset:"GMT+3",label:"Europe/Kiev"},{offset:"GMT+3",label:"Europe/Kirov"},{offset:"GMT+1",label:"Europe/Lisbon"},{offset:"GMT+2",label:"Europe/Ljubljana"},{offset:"GMT+1",label:"Europe/London"},{offset:"GMT+2",label:"Europe/Luxembourg"},{offset:"GMT+2",label:"Europe/Madrid"},{offset:"GMT+2",label:"Europe/Malta"},{offset:"GMT+3",label:"Europe/Mariehamn"},{offset:"GMT+3",label:"Europe/Minsk"},{offset:"GMT+2",label:"Europe/Monaco"},{offset:"GMT+3",label:"Europe/Moscow"},{offset:"GMT+2",label:"Europe/Oslo"},{offset:"GMT+2",label:"Europe/Paris"},{offset:"GMT+2",label:"Europe/Podgorica"},{offset:"GMT+2",label:"Europe/Prague"},{offset:"GMT+3",label:"Europe/Riga"},{offset:"GMT+2",label:"Europe/Rome"},{offset:"GMT+4",label:"Europe/Samara"},{offset:"GMT+2",label:"Europe/San_Marino"},{offset:"GMT+2",label:"Europe/Sarajevo"},{offset:"GMT+4",label:"Europe/Saratov"},{offset:"GMT+3",label:"Europe/Simferopol"},{offset:"GMT+2",label:"Europe/Skopje"},{offset:"GMT+3",label:"Europe/Sofia"},{offset:"GMT+2",label:"Europe/Stockholm"},{offset:"GMT+3",label:"Europe/Tallinn"},{offset:"GMT+2",label:"Europe/Tirane"},{offset:"GMT+4",label:"Europe/Ulyanovsk"},{offset:"GMT+2",label:"Europe/Vaduz"},{offset:"GMT+2",label:"Europe/Vatican"},{offset:"GMT+2",label:"Europe/Vienna"},{offset:"GMT+3",label:"Europe/Vilnius"},{offset:"GMT+3",label:"Europe/Volgograd"},{offset:"GMT+2",label:"Europe/Warsaw"},{offset:"GMT+2",label:"Europe/Zagreb"},{offset:"GMT+2",label:"Europe/Zurich"},{offset:"GMT+3",label:"Indian/Antananarivo"},{offset:"GMT+6",label:"Indian/Chagos"},{offset:"GMT+7",label:"Indian/Christmas"},{offset:"GMT+6:30",label:"Indian/Cocos"},{offset:"GMT+3",label:"Indian/Comoro"},{offset:"GMT+5",label:"Indian/Kerguelen"},{offset:"GMT+4",label:"Indian/Mahe"},{offset:"GMT+5",label:"Indian/Maldives"},{offset:"GMT+4",label:"Indian/Mauritius"},{offset:"GMT+3",label:"Indian/Mayotte"},{offset:"GMT+4",label:"Indian/Reunion"},{offset:"GMT+13",label:"Pacific/Apia"},{offset:"GMT+13",label:"Pacific/Auckland"},{offset:"GMT+11",label:"Pacific/Bougainville"},{offset:"GMT+13:45",label:"Pacific/Chatham"},{offset:"GMT-5",label:"Pacific/Easter"},{offset:"GMT+11",label:"Pacific/Efate"},{offset:"GMT+13",label:"Pacific/Enderbury"},{offset:"GMT+13",label:"Pacific/Fakaofo"},{offset:"GMT+12",label:"Pacific/Fiji"},{offset:"GMT+12",label:"Pacific/Funafuti"},{offset:"GMT-6",label:"Pacific/Galapagos"},{offset:"GMT-9",label:"Pacific/Gambier"},{offset:"GMT+11",label:"Pacific/Guadalcanal"},{offset:"GMT+10",label:"Pacific/Guam"},{offset:"GMT-10",label:"Pacific/Honolulu"},{offset:"GMT+14",label:"Pacific/Kiritimati"},{offset:"GMT+11",label:"Pacific/Kosrae"},{offset:"GMT+12",label:"Pacific/Kwajalein"},{offset:"GMT+12",label:"Pacific/Majuro"},{offset:"GMT-9:30",label:"Pacific/Marquesas"},{offset:"GMT-11",label:"Pacific/Midway"},{offset:"GMT+12",label:"Pacific/Nauru"},{offset:"GMT-11",label:"Pacific/Niue"},{offset:"GMT+12",label:"Pacific/Norfolk"},{offset:"GMT+11",label:"Pacific/Noumea"},{offset:"GMT-11",label:"Pacific/Pago_Pago"},{offset:"GMT+9",label:"Pacific/Palau"},{offset:"GMT-8",label:"Pacific/Pitcairn"},{offset:"GMT+11",label:"Pacific/Ponape"},{offset:"GMT+10",label:"Pacific/Port_Moresby"},{offset:"GMT-10",label:"Pacific/Rarotonga"},{offset:"GMT+10",label:"Pacific/Saipan"},{offset:"GMT-10",label:"Pacific/Tahiti"},{offset:"GMT+12",label:"Pacific/Tarawa"},{offset:"GMT+13",label:"Pacific/Tongatapu"},{offset:"GMT+10",label:"Pacific/Truk"},{offset:"GMT+12",label:"Pacific/Wake"},{offset:"GMT+12",label:"Pacific/Wallis"}].sort((e,t)=>this.compareOffsets(e.offset,t.offset))),this.tz.unshift({offset:"",label:"System Timezone -"}),this.dateTimezone().setValidators([mt.required,Av(this.tz)]),this.filteredTZ=this.dateTimezone().valueChanges.pipe(qn(500),to(""),si(e=>this.filterTZ(e||""))),this.filteredTZSubscription=this.filteredTZ.pipe(De(this._destroyRef)).subscribe()}filterTZ(e){let t=e.toLowerCase();return this.tz.filter(i=>i.label.toLowerCase().includes(t))}compareOffsets(e,t){let i=o=>{let r=o.match(/([+-]?)(\d+)(?::(\d+))?/);if(!r)return 0;let s=r[1]==="-"?-1:1,l=parseInt(r[2],10),m=r[3]?parseInt(r[3],10):0;return s*(l*60+m)};return i(e)-i(t)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["display-datetime-options"]],inputs:{dateFormat:[1,"dateFormat"],dateTimezone:[1,"dateTimezone"]},decls:15,vars:6,consts:[["timeZoneAutoComplete","matAutocomplete"],[1,"widget-options-grid"],[1,"options-grid-span2"],["matInput","","placeholder","dd/MM/yyyy HH:mm:ss","name","dateFormat","required","",3,"formControl"],["type","text","matInput","","placeholder","Type to use autocomplete","name","dateTimezone","required","",3,"formControl","matAutocomplete"],["mat-icon-button","","matSuffix","","aria-label","Clear"],[3,"value"],["mat-icon-button","","matSuffix","","aria-label","Clear",3,"click"],[1,"fa-solid","fa-close"]],template:function(t,i){if(t&1&&(d(0,"div",1)(1,"mat-form-field",2)(2,"mat-label"),c(3,"Date & Time Format"),u(),O(4,"input",3),u(),d(5,"mat-form-field",2)(6,"mat-label"),c(7,"Adjust Value to Time Zone"),u(),O(8,"input",4),I(9,bv,2,0,"button",5),d(10,"mat-autocomplete",null,0),ye(12,yv,2,3,"mat-option",6,zt),ut(14,"async"),u()()()),t&2){let o=Lt(11);f(4),R("formControl",i.dateFormat()),f(4),R("formControl",i.dateTimezone())("matAutocomplete",o),f(),P(i.dateTimezone().value?9:-1),f(3),Ae(Et(14,4,i.filteredTZ))}},dependencies:[Ct,At,xt,Ot,bt,ot,Pt,yt,Vi,Ra,_t,Jn,_o,Rt,as],encapsulation:2})}return n})();function xv(n,a){if(n&1&&(d(0,"mat-option",6),c(1),ut(2,"titlecase"),u()),n&2){let e=a.$implicit;R("value",Yi(e)),f(),Q(Et(2,3,e))}}var Jl={V1_PLUGIN:"autopilot",V2_BASE:"/signalk/v2/api",V2_AUTOPILOTS:"/signalk/v2/api/vessels/self/autopilots",V2_DEFAULT_AUTOPILOT_ID:"/signalk/v2/api/vessels/self/autopilots/_providers/_default"},Cm={options:{modes:[],states:[]},state:null,mode:"off-line",target:null,engaged:!1},xm=(()=>{class n{formGroupName=x.required();_pluginConfig=A(gs);_destroyRef=A(Ie);http=A(ao);rootFormGroup=A(rt);autopilotFormGroup;apiVersion=w(null);availableAutopilots=w({});autopilotPlugin=w(null);discoveryInProgress=w(!1);apiDetectionError=w(null);apInstances=L(()=>{let e=this.availableAutopilots();return e?Object.keys(e):[]});modes=w(null);pluginId=w(null);currentRequests=new Set;constructor(){W(()=>{this.autopilotFormGroup.get("apiVersion")?.setValue(this.apiVersion(),{emitEvent:!1})})}ngOnInit(){this.autopilotFormGroup=this.rootFormGroup.control.get(this.formGroupName()),this.modes.set(this.autopilotFormGroup.value.modes||null),this.detectAutopilotApi()}detectAutopilotApi(){return Le(this,null,function*(){this.discoveryInProgress.set(!0),console.log("[Autopilot Options] Starting API detection...");try{if(yield this.checkV2Api())if(this.apiVersion.set("v2"),this.autopilotFormGroup.get("apiVersion")?.setValue("v2",{emitEvent:!1}),this.availableAutopilots()&&Object.keys(this.availableAutopilots()).length>0){this.pluginId.set(Object.values(this.availableAutopilots())[0]?.provider??null),this.autopilotFormGroup.get("pluginId")?.setValue(this.pluginId(),{emitEvent:!1}),this.discoveryInProgress.set(!1);return}else console.warn("[Autopilot Options] No V2 autopilot provider found")}catch(e){console.error("[Autopilot Options] Error checking V2 API, checking V1...",e)}try{let e=yield this._pluginConfig.getPlugin(Jl.V1_PLUGIN);if(e.ok&&e.data.state.enabled){this.apiVersion.set("v1"),this.autopilotFormGroup.get("apiVersion")?.setValue("v1",{emitEvent:!1}),this.availableAutopilots.set({"Default Autopilot":{provider:"Signal K Autopilot",isDefault:!0}}),this.pluginId.set("Signal K Autopilot"),this.autopilotFormGroup.get("pluginId")?.setValue("Signal K Autopilot",{emitEvent:!1}),console.log("[Autopilot Options] V1 API Signal K Autopilot plugin detected"),this.discoveryInProgress.set(!1);return}console.log("[Autopilot Options] V1 API plugin (signalk-autopilot) not found")}catch(e){console.error("[Autopilot Options] V1 plugin detection failed:",e)}console.warn("[Autopilot Options] No Autopilot detected"),this.discoveryInProgress.set(!1)})}checkV2Api(){return Le(this,null,function*(){try{let e=yield Hn(this.makeHttpRequest(this.http.get(Jl.V2_AUTOPILOTS,{observe:"response",responseType:"json"})));return e&&e.body&&Object.keys(e.body).length>0?(this.availableAutopilots.set(e.body),console.log("[Autopilot Options] Discovered V2 API autopilot providers:",JSON.stringify(e.body))):(this.availableAutopilots.set({}),console.warn("[Autopilot Options] No V2 autopilot provider plugin found.")),e?.status===200}catch(e){if(e&&typeof e=="object"&&"status"in e){let t=e;t.status===404?console.log("[Autopilot Options] V2 API endpoint not found (404)"):t.status>=500?console.warn("[Autopilot Options] V2 API server error:",t.status,t.statusText):console.log("[Autopilot Options] V2 API call to discover Autopilot Providers failed:",t.status,t.statusText)}else console.log("[Autopilot Options] V2 API network error:",e);return!1}})}discoverV2AutopilotOptions(e){return Le(this,null,function*(){let t;try{try{this.discoveryInProgress.set(!0),t=yield Hn(this.makeHttpRequest(this.http.get(`${Jl.V2_AUTOPILOTS}/${e}`))),console.log("[Autopilot Options] V2 Autopilot Options response:",JSON.stringify(t))}catch(i){t=Cm,console.log(`[Autopilot Options] Default AP discovery endpoint error for instance '${e}'`)}return this.discoveryInProgress.set(!1),t}catch(i){return console.error("[Autopilot Options] Failed to discover V2 endpoints:",i),console.log(`[Autopilot Options] Using fallback V2 endpoints for instance '${e}'`),Cm}})}onAutopilotInstanceIdChange(e){let t=e.value;if(e.value===""){this.modes.set(""),this.autopilotFormGroup.get("modes")?.setValue("",{emitEvent:!1});return}console.log("[Autopilot Options] Selected Autopilot Instance ID:",t),this.apiVersion()==="v2"?this.discoverV2AutopilotOptions(t).then(i=>{let o=i.options.modes||[];this.modes.set(o.join(", ")),this.autopilotFormGroup.get("modes")?.setValue(o,{emitEvent:!1}),console.log("[Autopilot Options] Autopilot plugin supported modes :",o.join(", "))}).catch(i=>{console.error("[Autopilot Options] Error requesting autopilot modes:",i),this.autopilotFormGroup.get("modes")?.setValue([],{emitEvent:!1})}):this.apiVersion()==="v1"&&(this.modes.set("standby, auto, wind, route"),this.autopilotFormGroup.get("modes")?.setValue("standby, auto, wind, route",{emitEvent:!1}),console.log("[Autopilot Options] Autopilot mode set to Raymarine v1 API modes: standby, auto, wind, route"))}makeHttpRequest(e){let t=e.pipe(De(this._destroyRef));return this.currentRequests.add(t),t.pipe(Gr(()=>this.currentRequests.delete(t)))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["select-autopilot"]],inputs:{formGroupName:[1,"formGroupName"]},decls:30,vars:4,consts:[[1,"display-content","tab-content"],[1,"autopilot-options",3,"formGroup"],[1,"flex-item-rounded-card","rounded-card-color",2,"margin-block","10px"],[2,"margin-block-start","0px"],["placeholder","Select autopilot...","formControlName","instanceId","name","instanceId","required","",3,"selectionChange"],["value",""],[3,"value"],[1,"flex-item-rounded-card","rounded-card-color",2,"margin-block","10px","margin-left","10px","margin-right","10px"],["name","headingDirectionTrue","formControlName","headingDirectionTrue"],["name","invertRudder","formControlName","invertRudder"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),c(4,"Signal K Service Discovery"),u(),d(5,"ul")(6,"li")(7,"b"),c(8,"API Version:"),u(),c(9),u(),d(10,"li")(11,"b"),c(12,"Plugin:"),u(),c(13),u()()(),d(14,"mat-form-field")(15,"mat-label"),c(16,"Target Autopilot"),u(),d(17,"mat-select",4),$("selectionChange",function(r){return i.onAutopilotInstanceIdChange(r)}),d(18,"mat-option",5),c(19,"No autopilot"),u(),ye(20,xv,3,5,"mat-option",6,Re),u()(),d(22,"div",7)(23,"b"),c(24,"Supported modes:"),u(),c(25),u(),d(26,"mat-checkbox",8),c(27," Display True Heading "),u(),d(28,"mat-checkbox",9),c(29," Invert Rudder Angle Indicator "),u()()()),t&2&&(f(),R("formGroup",i.autopilotFormGroup),f(8),be(" ",i.apiVersion()),f(4),be(" ",i.pluginId()),f(7),Ae(i.apInstances()),f(5),be(" ",i.modes()," "))},dependencies:[yt,ot,Mt,Pt,rt,Jt,qt,Ct,At,fi,ei,gi,jt,Rt,$t,hn],styles:[".autopilot-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}"]})}return n})();var Mo=(()=>{class n{data=A(st);destroyRef=A(Ie);allPaths=new Set;registrations=new Map;constructor(){this.seedFromDataCache(),this.data.observePathUpdates().pipe(De(this.destroyRef)).subscribe(e=>this.applyPathUpdate(e)),this.data.isResetService().pipe(De(this.destroyRef)).subscribe(()=>this.reset())}seedFromDataCache(){for(let e of this.data.getCachedPaths())this.addPath(e)}register(e){this.assertHasCriteria(e);let t=this.createToken(e.id),i=this.compileCriteria(e),o=new Set;for(let r of this.allPaths)this.matchesCriteria(r,i)&&o.add(r);return this.registrations.set(t,{criteria:i,matches:o,changes$:new Zt}),t}unregister(e){let t=this.registrations.get(e);t&&(t.changes$.complete(),this.registrations.delete(e))}changes(e){return this.registrations.get(e)?.changes$.asObservable()??bc}activePaths(e){return this.registrations.get(e)?.matches??new Set}match(e){this.assertHasCriteria(e);let t=this.compileCriteria(e);return Array.from(this.allPaths).filter(i=>this.matchesCriteria(i,t))}applyPathUpdate(e){let t=e?.fullPath;t&&(e.kind==="data"&&e.update?.value===null||this.addPath(t))}addPath(e){if(!this.allPaths.has(e)){this.allPaths.add(e);for(let t of this.registrations.values())this.matchesCriteria(e,t.criteria)&&(t.matches.add(e),t.changes$.next({type:"add",path:e}))}}removePath(e){if(this.allPaths.delete(e))for(let t of this.registrations.values())t.matches.delete(e)&&t.changes$.next({type:"remove",path:e})}reset(){for(let e of this.registrations.values()){for(let t of e.matches)e.changes$.next({type:"remove",path:t});e.matches.clear()}this.allPaths.clear()}compileCriteria(e){let t=e.patterns?.length?e.patterns:[];return ge(Z({},e),{patterns:t,compiled:{patterns:t.map(i=>this.globToRegex(i)),contextTypes:e.contextTypes??[],prefixGuards:e.pathPrefixes??[],suffixGuards:e.pathSuffixes??[]}})}matchesCriteria(e,t){let i=t.compiled,o=this.getContextType(e);if(i.contextTypes.length&&(!o||!i.contextTypes.includes(o)))return!1;let r=this.getPathPart(e,o);return i.prefixGuards.length&&!i.prefixGuards.some(s=>r.startsWith(s))||i.suffixGuards.length&&!this.matchesSuffix(r,i.suffixGuards)?!1:i.patterns.length?i.patterns.some(s=>s.test(e)):!0}getPathPart(e,t){if(t==="self"){let o=e.indexOf(".");return o===-1?e:e.slice(o+1)}if(t==="vessels"||t==="atons"){let o=`${t}.urn:mrn:imo:mmsi:`;if(!e.startsWith(o))return e;let r=e.indexOf(".",o.length);return r===-1?"":e.slice(r+1)}let i=e.indexOf(".");return i===-1?e:e.slice(i+1)}getContextType(e){return e.startsWith("self.")?"self":e.startsWith("vessels.urn:mrn:imo:mmsi:")?"vessels":e.startsWith("atons.urn:mrn:imo:mmsi:")?"atons":null}globToRegex(e){let i="^"+e.replace(/[-/\\^$+?.()|[\]{}]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".")+"$";return new RegExp(i)}matchesSuffix(e,t){if(!t.length)return!0;let i=e.lastIndexOf("."),o=i===-1?`.${e}`:e.slice(i);return t.some(r=>e.endsWith(r)||o===r)}createToken(e){let t=e??"token",i=`${t}-${Math.random().toString(36).slice(2,10)}`;for(;this.registrations.has(i);)i=`${t}-${Math.random().toString(36).slice(2,10)}`;return i}assertHasCriteria(e){let t=Array.isArray(e.patterns)&&e.patterns.length>0,i=Array.isArray(e.contextTypes)&&e.contextTypes.length>0,o=Array.isArray(e.pathPrefixes)&&e.pathPrefixes.length>0,r=Array.isArray(e.pathSuffixes)&&e.pathSuffixes.length>0;if(!t&&!i&&!o&&!r)throw new Error("PathDiscoveryService.register requires at least one criteria (pattern or guard).")}ngOnDestroy(){for(let e of this.registrations.values())e.changes$.complete();this.registrations.clear(),this.allPaths.clear()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Sv=(n,a)=>a.key;function wv(n,a){if(n&1&&(d(0,"mat-option",4),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),Q(e.id)}}function _v(n,a){n&1&&(d(0,"div",5),c(1,"No banks configured yet."),u())}function Mv(n,a){if(n&1&&(d(0,"mat-option",4),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),Q(e)}}function Tv(n,a){if(n&1&&(d(0,"mat-option",4),c(1),ut(2,"titlecase"),u()),n&2){let e=a.$implicit;R("value",e),f(),Q(Et(2,2,e))}}function kv(n,a){if(n&1){let e=we();d(0,"div",9)(1,"div",10)(2,"mat-form-field",11)(3,"mat-label"),c(4,"Bank Name"),u(),O(5,"input",12),u(),d(6,"button",13),$("click",function(){let i=ne(e).$index,o=T();return ae(o.removeBank(i))}),d(7,"mat-icon"),c(8,"delete"),u()()(),d(9,"mat-form-field",2)(10,"mat-label"),c(11,"Battery Members"),u(),d(12,"mat-select",14),ye(13,Mv,2,2,"mat-option",4,Re),u()(),d(15,"mat-form-field",2)(16,"mat-label"),c(17,"Connection Mode"),u(),d(18,"mat-select",15),ye(19,Tv,3,4,"mat-option",4,zt),u()()()}if(n&2){let e=a.$index,t=T();R("formGroupName",e),f(13),Ae(t.discoveredBatteryIds()),f(6),Ae(t.connectionModes)}}var Sm=(()=>{class n{connectionModes=["parallel","series"];formGroupName=x.required();rootFormGroup=A(rt);discovery=A(Mo);destroyRef=A(Ie);bmsFormGroup;groupsFormArray;trackedDevicesControl;discoveredBatteryIds=w([]);discoveredTrackedDevices=L(()=>this.discoveredBatteryIds().map(e=>({id:e,source:"default",key:`${e}||default`})));hasGroups=L(()=>this.groupsFormArray?.length>0);discoveryToken;ngOnInit(){this.bmsFormGroup=this.rootFormGroup.control.get(this.formGroupName()),this.bmsFormGroup&&(this.ensureTrackedControl(),this.ensureBanksArray(),this.initializeDiscovery())}addBank(){let e={id:`bank-${Date.now()}`,name:"New Bank",memberIds:[],connectionMode:"parallel"};this.groupsFormArray.push(this.createGroup(e)),this.groupsFormArray.markAsDirty()}removeBank(e){this.groupsFormArray.removeAt(e),this.groupsFormArray.markAsDirty()}ngOnDestroy(){this.discoveryToken&&this.discovery.unregister(this.discoveryToken)}ensureTrackedControl(){let e=this.bmsFormGroup.get("trackedDevices");if(e instanceof We){this.trackedDevicesControl=e,this.trackedDevicesControl.setValue(this.normalizeTrackedDeviceArray(this.trackedDevicesControl.value),{emitEvent:!1});return}this.trackedDevicesControl=new We([]),this.bmsFormGroup.addControl("trackedDevices",this.trackedDevicesControl)}compareTrackedDevice(e,t){return!e||!t?e===t:e.key===t.key}normalizeTrackedDeviceArray(e){if(!Array.isArray(e))return[];let t=new Map;return e.forEach(i=>{if(!i||typeof i!="object")return;let o=i,r=typeof o.id=="string"?o.id.trim():"",s=typeof o.source=="string"?o.source.trim():"default";if(!r||!s)return;let l=typeof o.key=="string"&&o.key.trim().length>0?o.key.trim():`${r}||${s}`;t.set(l,{id:r,source:s,key:l})}),[...t.values()].sort((i,o)=>i.key.localeCompare(o.key))}ensureBanksArray(){let e=this.bmsFormGroup.get("groups")??this.bmsFormGroup.get("banks");if(e instanceof so||e instanceof Pn){this.groupsFormArray=e,this.bmsFormGroup.get("groups")||this.bmsFormGroup.setControl("groups",this.groupsFormArray);return}let t=Array.isArray(e?.value)?e.value:[];this.groupsFormArray=new Pn(t.map(i=>this.createGroup(i))),this.bmsFormGroup.setControl("groups",this.groupsFormArray)}createGroup(e){let t=Array.isArray(e.memberIds)?e.memberIds:Array.isArray(e.batteryIds)?e.batteryIds:[];return new Xi({id:new We(e.id,mt.required),name:new We(e.name,mt.required),memberIds:new We(t),connectionMode:new We(e.connectionMode??"parallel",mt.required)})}initializeDiscovery(){this.discoveryToken=this.discovery.register({id:"bms-batteries",patterns:["self.electrical.batteries.*"],contextTypes:["self"],pathPrefixes:["electrical.batteries."]}),this.updateDiscoveredBatteryIds(),this.discovery.changes(this.discoveryToken).pipe(De(this.destroyRef)).subscribe(()=>this.updateDiscoveredBatteryIds())}updateDiscoveredBatteryIds(){if(!this.discoveryToken)return;let e=Array.from(this.discovery.activePaths(this.discoveryToken)).map(t=>this.extractBatteryId(t)).filter(t=>!!t);this.discoveredBatteryIds.set([...new Set(e)].sort())}extractBatteryId(e){let t=e.match(/self\.electrical\.batteries\.([^.]+)\./);return t?t[1]:null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["bms-bank-setup"]],inputs:{formGroupName:[1,"formGroupName"]},decls:23,vars:3,consts:[[1,"bms-config",3,"formGroup"],[1,"bms-config-section"],["appearance","outline",1,"full-width"],["formControlName","trackedDevices","multiple","",3,"compareWith"],[3,"value"],[1,"hint"],[1,"section-header"],["mat-stroked-button","","color","primary","type","button",3,"click"],["formArrayName","groups",1,"bank-list"],[1,"bank-card",3,"formGroupName"],[1,"bank-row"],["appearance","outline",1,"bank-name"],["matInput","","formControlName","name"],["mat-icon-button","","type","button","aria-label","Remove bank",3,"click"],["formControlName","memberIds","multiple",""],["formControlName","connectionMode"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1)(2,"h3"),c(3,"Tracked Batteries"),u(),d(4,"mat-form-field",2)(5,"mat-label"),c(6,"Battery Instances"),u(),d(7,"mat-select",3),ye(8,wv,2,2,"mat-option",4,Sv),u()(),d(10,"div",5),c(11," Leave empty to display all discovered batteries. "),u()(),O(12,"mat-divider"),d(13,"div",1)(14,"div",6)(15,"h3"),c(16,"Battery Banks"),u(),d(17,"button",7),$("click",function(){return i.addBank()}),c(18," Add Bank "),u()(),d(19,"div",8),I(20,_v,2,0,"div",5),ye(21,kv,21,1,"div",9,Re),u()()()),t&2&&(R("formGroup",i.bmsFormGroup),f(7),R("compareWith",i.compareTrackedDevice),f(),Ae(i.discoveredTrackedDevices()),f(12),P(i.hasGroups()?-1:20),f(),Ae(i.groupsFormArray.controls))},dependencies:[yt,bt,ot,Mt,rt,Jt,lo,co,qt,Ct,At,$t,xt,gi,jt,Rt,et,vt,_t,Xe,je,Wi,Li,hn],styles:["[_nghost-%COMP%]{display:block;width:100%}.bms-config[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:12px 4px}.bms-config-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.section-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px}.full-width[_ngcontent-%COMP%]{width:100%}.bank-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.bank-card[_ngcontent-%COMP%]{border:1px solid var(--kip-widget-card-border-color);border-radius:12px;padding:12px;background:var(--kip-contrast-dimmer-color);display:flex;flex-direction:column;gap:10px}.bank-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.bank-name[_ngcontent-%COMP%]{flex:1}.hint[_ngcontent-%COMP%]{font-size:12px;opacity:.7}"]})}return n})();var wm={fill:"#b1b1b1",stroke:"#50505f"},Dv=24,Ev=1.6,Iv="#e6e6e6",Pv=.15,Rv=1,Nv=1,td=15e3,Ds=25e3,Ov=.9,Vv=1.25;function _m(n){let a=n.baseSizePx??Dv,e=n.unconfirmedFill??Iv,t=n.unconfirmedOpacity??Pv,i=n.targetState==="confirmed",o=i?Lv(n.collisionRiskRating):"none",r=a,s,l,m,h,v,y,C;return i||(s=e,m=t,h=t),i&&n.isStationary&&(m=0),n.targetKind==="moving"&&o!=="none"?(y=o==="high"?"red":"yellow",C=Ov,{fill:s,stroke:l,auraColor:y,auraOpacity:C,fillOpacity:m,strokeOpacity:h,strokeWidth:v,sizePx:Math.round(a*Vv)}):{fill:s,stroke:l,auraColor:y,auraOpacity:C,fillOpacity:m,strokeOpacity:h,strokeWidth:v,sizePx:r}}function Mm(n,a){let e=Fv(n,a),t=Wv(n,a.sizePx),i=a.auraColor?Uv(t):t;return qv(i,zv(e))}function id(n){return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(n).replace(/%0A/g,"").replace(/%0D/g,"")}`}function Lv(n){return typeof n!="number"||!Number.isFinite(n)?"none":n<td?"high":n<Ds?"low":"none"}function Wv(n,a){let e=`${a}px`;return/<svg[^>]*\bwidth=/.test(n)?n=n.replace(/\bwidth="[^"]*"/i,`width="${e}"`):n=n.replace(/<svg\b/i,`<svg width="${e}"`),/<svg[^>]*\bheight=/.test(n)?n=n.replace(/\bheight="[^"]*"/i,`height="${e}"`):n=n.replace(/<svg\b/i,`<svg height="${e}"`),n}function Fv(n,a){let e=Bv(n);return{fill:la(a.fill,e.fill,wm.fill),stroke:la(a.stroke,e.stroke,wm.stroke),strokeDasharray:la(a.strokeStyle,e.strokeStyle,"solid"),auraColor:la(a.auraColor,e.auraColor,"transparent"),auraOpacity:la(a.auraOpacity,e.auraOpacity,0),strokeWidth:la(a.strokeWidth,e.strokeWidth,Ev),fillOpacity:la(a.fillOpacity,e.fillOpacity,Rv),strokeOpacity:la(a.strokeOpacity,e.strokeOpacity,Nv)}}function Bv(n){return{fill:dr(n,"--icon-fill"),stroke:dr(n,"--icon-stroke"),strokeStyle:dr(n,"--icon-stroke-dasharray"),auraColor:dr(n,"--icon-aura-color"),auraOpacity:ks(n,"--icon-aura-opacity"),strokeWidth:ks(n,"--icon-stroke-width"),fillOpacity:ks(n,"--icon-fill-opacity"),strokeOpacity:ks(n,"--icon-stroke-opacity")}}function dr(n,a){let e=n.match(new RegExp(`${Gv(a)}:\\s*([^;]+);`,"i"));return e?e[1].trim():void 0}function ks(n,a){let e=dr(n,a);if(!e)return;let t=Number(e);return Number.isFinite(t)?t:void 0}function Gv(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function la(n,a,e){return n!==void 0?n:a!==void 0?a:e}function zv(n){return[":root {",`--icon-fill: ${n.fill};`,`--icon-fill-opacity: ${ed(n.fillOpacity)};`,`--icon-stroke: ${n.stroke};`,`--icon-stroke-dasharray: ${n.strokeDasharray};`,`--icon-aura-color: ${n.auraColor};`,`--icon-aura-opacity: ${ed(n.auraOpacity)};`,`--icon-stroke-width: ${n.strokeWidth};`,`--icon-stroke-opacity: ${ed(n.strokeOpacity)};`,"}"].join("")}function Uv(n){if(n.includes('id="icon-aura"')||n.includes("id='icon-aura'"))return n;let a=Hv(n)??{minX:0,minY:0,width:24,height:24},e=a.minX+a.width/2,t=a.minY+a.height/2,i=Math.min(a.width,a.height)/2,o=["<defs>",'<radialGradient id="icon-aura" cx="50%" cy="50%" r="50%">','<stop offset="0%" stop-color="var(--icon-aura-color)" stop-opacity="var(--icon-aura-opacity)" />','<stop offset="100%" stop-color="var(--icon-aura-color)" stop-opacity="0" />',"</radialGradient>","</defs>"].join(""),r=`<circle class="icon-aura" cx="${e}" cy="${t}" r="${i}" fill="url(#icon-aura)" />`;return n.replace(/<svg[^>]*>/i,s=>`${s}${o}${r}`)}function Hv(n){let a=n.match(/viewBox="([^"]+)"/i);if(!a)return null;let e=a[1].trim().split(/\s+/).map(t=>Number(t));return e.length!==4||e.some(t=>!Number.isFinite(t))?null:{minX:e[0],minY:e[1],width:e[2],height:e[3]}}function qv(n,a){let e=n.match(/(<style[^>]*>)([\s\S]*?)(<\/style>)/i);if(e){let[,t,,i]=e;return n.replace(e[0],`${t}${a}${i}`)}return n.replace(/<svg[^>]*>/i,t=>`${t}<style>${a}</style>`)}function ed(n){return Number.isFinite(n)?Math.min(1,Math.max(0,n)):1}var Tm=new Map,nd=new Map,km=new Map,Dm=new Map,Em=new Map,Im='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" fill="#12f802" stroke="#fb05eb" stroke-width="1.4"/></svg>',$v={"aton/other":"assets/svg/AtoN/other/aton.svg","aton/basestation":"assets/svg/AtoN/other/basestation.svg","aton/east-beacon":"assets/svg/AtoN/cardinal/east_beacon.svg","aton/east-mark":"assets/svg/AtoN/cardinal/east_mark.svg","aton/west-beacon":"assets/svg/AtoN/cardinal/west_beacon.svg","aton/west-mark":"assets/svg/AtoN/cardinal/west_mark.svg","aton/north-beacon":"assets/svg/AtoN/cardinal/north_beacon.svg","aton/north-mark":"assets/svg/AtoN/cardinal/north_mark.svg","aton/south-beacon":"assets/svg/AtoN/cardinal/south_beacon.svg","aton/south-mark":"assets/svg/AtoN/cardinal/south_mark.svg","aton/port-beacon":"assets/svg/AtoN/lateral/port_beacon.svg","aton/starboard-beacon":"assets/svg/AtoN/lateral/starboard_beacon.svg","aton/port-preferred-beacon":"assets/svg/AtoN/lateral/port_preferred_beacon.svg","aton/starboard-preferred-beacon":"assets/svg/AtoN/lateral/starboard_preferred_beacon.svg","aton/port-mark":"assets/svg/AtoN/lateral/port_mark.svg","aton/starboard-mark":"assets/svg/AtoN/lateral/starboard_mark.svg","aton/port-preferred-mark":"assets/svg/AtoN/lateral/port_preferred_mark.svg","aton/starboard-preferred-mark":"assets/svg/AtoN/lateral/starboard_preferred_mark.svg","aton/special-beacon":"assets/svg/AtoN/special/special_beacon.svg","aton/special-mark":"assets/svg/AtoN/special/special_mark.svg","aton/safewater-beacon":"assets/svg/AtoN/dangerSafe/safewater_beacon.svg","aton/safewater-mark":"assets/svg/AtoN/dangerSafe/safewater_mark.svg","aton/isolateddanger-beacon":"assets/svg/AtoN/dangerSafe/isolateddanger_beacon.svg","aton/isolateddanger-mark":"assets/svg/AtoN/dangerSafe/isolateddanger_mark.svg","aton/unknown":"assets/svg/AtoN/other/unknown.svg"},Pm={"vessel/fishing":"assets/svg/vessel/fishing.svg","vessel/diving":"assets/svg/vessel/diving-ops.svg","vessel/military":"assets/svg/vessel/military-ops.svg","vessel/sailing":"assets/svg/vessel/sailing.svg","vessel/pleasurecraft":"assets/svg/vessel/pleasurecraft.svg","vessel/highspeed":"assets/svg/vessel/highspeed.svg","vessel/pilot":"assets/svg/vessel/pilot.svg","vessel/sar":"assets/svg/vessel/sar.svg","vessel/tug":"assets/svg/vessel/tug.svg","vessel/law":"assets/svg/vessel/law-enforcement.svg","vessel/spare":"assets/svg/vessel/other.svg","vessel/passenger":"assets/svg/vessel/passenger.svg","vessel/cargo":"assets/svg/vessel/cargo.svg","vessel/tanker":"assets/svg/vessel/tanker.svg","vessel/other":"assets/svg/vessel/other.svg","vessel/unknown":"assets/svg/vessel/unknown.svg","vessel/self":"assets/svg/vessel/self.svg"},Es=Object.keys(Pm),jv={"beacon/sart":"assets/svg/sar-distress-device/sart-eprib-mob.svg","beacon/mob":"assets/svg/sar-distress-device/sart-eprib-mob.svg","beacon/epirb":"assets/svg/sar-distress-device/sart-eprib-mob.svg"},Yv=Z(Z(Z({},$v),Pm),jv),Kv=[{code:0,key:"aton/other"},{code:1,key:"aton/other"},{code:2,key:"aton/other"},{code:3,key:"aton/other"},{code:4,key:"aton/other"},{code:5,key:"aton/other"},{code:6,key:"aton/other"},{code:7,key:"aton/other"},{code:8,key:"aton/other"},{code:9,key:"aton/north-beacon"},{code:10,key:"aton/east-beacon"},{code:11,key:"aton/south-beacon"},{code:12,key:"aton/west-beacon"},{code:13,key:"aton/port-beacon"},{code:14,key:"aton/starboard-beacon"},{code:15,key:"aton/port-preferred-beacon"},{code:16,key:"aton/starboard-preferred-beacon"},{code:17,key:"aton/isolateddanger-beacon"},{code:18,key:"aton/safewater-beacon"},{code:19,key:"aton/special-beacon"},{code:20,key:"aton/north-mark"},{code:21,key:"aton/east-mark"},{code:22,key:"aton/south-mark"},{code:23,key:"aton/west-mark"},{code:24,key:"aton/port-mark"},{code:25,key:"aton/starboard-mark"},{code:26,key:"aton/port-preferred-mark"},{code:27,key:"aton/starboard-preferred-mark"},{code:28,key:"aton/isolateddanger-mark"},{code:29,key:"aton/safewater-mark"},{code:30,key:"aton/special-mark"},{code:31,key:"aton/other"}],Xv=[{min:0,max:9,key:"vessel/other"},{min:10,max:19,key:"vessel/other"},{min:20,max:29,key:"vessel/highspeed"},{min:30,max:30,key:"vessel/fishing"},{min:31,max:31,key:"vessel/tug"},{min:32,max:32,key:"vessel/tug"},{min:33,max:33,key:"vessel/tug"},{min:34,max:34,key:"vessel/diving"},{min:35,max:35,key:"vessel/military"},{min:36,max:36,key:"vessel/sailing"},{min:37,max:37,key:"vessel/pleasurecraft"},{min:38,max:39,key:"vessel/other"},{min:40,max:49,key:"vessel/highspeed"},{min:50,max:50,key:"vessel/pilot"},{min:51,max:51,key:"vessel/sar"},{min:52,max:52,key:"vessel/tug"},{min:53,max:53,key:"vessel/tug"},{min:54,max:54,key:"vessel/tug"},{min:55,max:55,key:"vessel/law"},{min:56,max:56,key:"vessel/other"},{min:57,max:57,key:"vessel/other"},{min:58,max:58,key:"vessel/tug"},{min:59,max:59,key:"vessel/tug"},{min:60,max:69,key:"vessel/passenger"},{min:70,max:79,key:"vessel/cargo"},{min:80,max:89,key:"vessel/tanker"},{min:90,max:99,key:"vessel/other"}];function Rm(n){return Le(this,null,function*(){let a=_m(ob(n));return Jv(od(n),a)})}function Nm(){return Le(this,null,function*(){return Zv("vessel/self")})}function Om(n){return Le(this,null,function*(){let a=Tm.get(n);if(a)return a;let e=nd.get(n);if(e)return e;let t=Yv[n],i=fetch(t).then(o=>o.ok?o.text():Im).catch(o=>(console.warn("[ais-icon-registry] Icon fetch error, using fallback.",{key:n,url:t,error:o}),Im)).then(o=>(Tm.set(n,o),nd.delete(n),o));return nd.set(n,i),i})}function Zv(n){return Le(this,null,function*(){let a=km.get(n);if(a)return a;let e=yield Om(n),t=id(e);return km.set(n,t),t})}function Qv(n,a){return Le(this,null,function*(){let e=Vm(n,a),t=Dm.get(e);if(t)return t;let i=yield Om(n),o=Mm(i,a);return Dm.set(e,o),o})}function Jv(n,a){return Le(this,null,function*(){let e=Vm(n,a),t=Em.get(e);if(t)return t;let i=yield Qv(n,a),o=id(i);return Em.set(e,o),o})}function Vm(n,a){return`${n}|${eb(a)}`}function eb(n){return[ad(n.fill),ad(n.stroke),ad(n.auraColor),cr(n.fillOpacity),cr(n.strokeOpacity),cr(n.auraOpacity),cr(n.strokeWidth),cr(n.sizePx)].join("|")}function ad(n){return n??""}function cr(n){return n===void 0||!Number.isFinite(n)?"":n.toFixed(4)}function od(n){let a=ib(tb(n.mmsi));if(a)return a;switch(n.type){case"aton":return nb(n.atonTypeId??null);case"basestation":return"aton/basestation";case"sar":return"vessel/sar";case"vessel":return ab(n.aisShipTypeId??null);default:return"vessel/unknown"}}function tb(n){if(n==null)return null;let a=typeof n=="number"?String(n):n;return a.length?a:null}function ib(n){return n?n.startsWith("970")?"beacon/sart":n.startsWith("972")?"beacon/mob":n.startsWith("974")?"beacon/epirb":null:null}function nb(n){let a=typeof n=="number"&&Number.isFinite(n)?n:null,t=(a===null?void 0:Kv.find(i=>i.code===a))?.key??"aton/unknown";return t}function ab(n){if(n!==null){for(let a of Xv)if(n>=a.min&&n<=a.max)return a.key}return"vessel/other"}function ob(n){let a=sb(n.navState),e=n.targetKind??(a?"fixed":rb(n.type)),t=n.status==="unconfirmed"||n.status==="lost"?"unconfirmed":"confirmed";return Z({targetKind:e,targetState:t,isStationary:a,collisionRiskRating:n.collisionRiskRating},n.themeOverrides)}function rb(n){switch(n){case"aton":case"basestation":return"fixed";default:return"moving"}}function sb(n){let a=lb(n);if(a!==void 0)return a===1||a===5;let e=db(n);return e?e.includes("moored")||e.includes("anchored")||e.includes("at anchor"):!1}function lb(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let a=n.trim();if(!a.length)return;let e=Number(a);return Number.isFinite(e)?e:void 0}}function db(n){if(typeof n!="string")return;let a=n.trim().toLowerCase();return a.length?a.replace(/\s+/g," "):void 0}function cb(n,a){if(n&1){let e=we();d(0,"mat-checkbox",8),$("change",function(){let i=ne(e).$implicit,o=T(2);return ae(o.toggleVesselType(i))}),c(1),u()}if(n&2){let e=a.$implicit,t=T(2);R("checked",t.isVesselTypeSelected(e)),f(),be(" ",t.formatVesselTypeLabel(e)," ")}}function ub(n,a){if(n&1&&(d(0,"div",0)(1,"p",1),c(2,"Categories"),u(),d(3,"mat-checkbox",2),c(4,"Anchored/Moored"),u(),d(5,"mat-checkbox",3),c(6,"All AtoN"),u(),d(7,"mat-checkbox",4),c(8,"All but SAR"),u(),d(9,"mat-checkbox",5),c(10,"All Vessels"),u(),O(11,"mat-divider",6),d(12,"p",1),c(13,"Types of vessels"),u(),ye(14,cb,2,2,"mat-checkbox",7,zt),u()),n&2){let e=T();R("formGroup",e.filtersGroup),f(14),Ae(e.vesselTypeFilters)}}var Lm=(()=>{class n{formGroupName=x.required();rootFormGroup=A(rt);fb=A(Zn);aisFormGroup=null;filtersGroup=null;vesselTypeFilters=Es.filter(e=>e!=="vessel/self"&&e!=="vessel/unknown"&&e!=="vessel/spare");ngOnInit(){if(this.aisFormGroup=this.rootFormGroup.control.get(this.formGroupName()),!this.aisFormGroup){console.warn(`AIS form group "${this.formGroupName()}" not found for target options.`);return}this.filtersGroup=this.ensureFiltersGroup(this.aisFormGroup)}isVesselTypeSelected(e){let t=this.vesselTypesControl();if(!t)return!1;let i=t.value;return Array.isArray(i)&&i.includes(e)}toggleVesselType(e){let t=this.vesselTypesControl();if(!t)return;let i=Array.isArray(t.value)?t.value:[],o=new Set(i);o.has(e)?o.delete(e):o.add(e),t.setValue(Array.from(o))}formatVesselTypeLabel(e){let t=e.replace("vessel/","");switch(t){case"pleasurecraft":return"Pleasure Craft";case"highspeed":return"High Speed";case"sar":return"SAR";case"law":return"Law Enforcement";default:return`${t.charAt(0).toUpperCase()}${t.slice(1)}`}}ensureFiltersGroup(e){let t=e.get("filters");if(!t)return t=this.buildDefaultFiltersGroup(),e.addControl("filters",t),t;this.ensureControl(t,"anchoredMoored",!1),this.ensureControl(t,"noCollisionRisk",!1),this.ensureControl(t,"allAton",!1),this.ensureControl(t,"allButSar",!1),this.ensureControl(t,"allVessels",!1);let i=this.ensureControl(t,"vesselTypes",[]);return Array.isArray(i.value)||i.setValue([]),t}buildDefaultFiltersGroup(){return this.fb.group({anchoredMoored:new We(!1),noCollisionRisk:new We(!1),allAton:new We(!1),allButSar:new We(!1),allVessels:new We(!1),vesselTypes:new We([])})}ensureControl(e,t,i){let o=e.get(t);return o||(o=new We(i),e.addControl(t,o)),o}vesselTypesControl(){return this.filtersGroup?.get("vesselTypes")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["ais-target-options"]],inputs:{formGroupName:[1,"formGroupName"]},decls:1,vars:1,consts:[[1,"vessel-type-grid",3,"formGroup"],[1,"span-all"],["formControlName","anchoredMoored"],["formControlName","allAton"],["formControlName","allButSar"],["formControlName","allVessels"],[1,"span-all","ais-target-divider"],[3,"checked"],[3,"change","checked"]],template:function(t,i){t&1&&I(0,ub,16,1,"div",0),t&2&&P(i.filtersGroup?0:-1)},dependencies:[yt,ot,Mt,rt,Jt,fi,ei,Wi,Li],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;overflow:hidden}.ais-target-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.vessel-type-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0px 12px}.span-all[_ngcontent-%COMP%]{grid-column:1/-1}.ais-target-divider[_ngcontent-%COMP%]{margin:4px 0}"],changeDetection:0})}return n})();var mb=(n,a)=>a.key;function hb(n,a){if(n&1&&(d(0,"mat-option",4),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),Ut("",e.id," (",e.source,")")}}function pb(n,a){n&1&&(d(0,"div",5),c(1,"No chargers discovered yet."),u())}function gb(n,a){if(n&1&&(d(0,"div",8)(1,"div",9),c(2),u(),d(3,"mat-form-field",2)(4,"mat-label"),c(5,"Array Rated Power (W)"),u(),O(6,"input",10),u()()),n&2){let e=a.$implicit;R("formGroupName",e),f(2),Q(e)}}function fb(n,a){n&1&&(d(0,"div",5),c(1,"No groups configured yet."),u())}function vb(n,a){if(n&1&&(d(0,"mat-option",4),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),Q(e)}}function bb(n,a){if(n&1&&(d(0,"mat-option",4),c(1),ut(2,"titlecase"),u()),n&2){let e=a.$implicit;R("value",e),f(),Q(Et(2,2,e))}}function yb(n,a){if(n&1){let e=we();d(0,"div",14)(1,"div",15)(2,"mat-form-field",16)(3,"mat-label"),c(4,"Group Name"),u(),O(5,"input",17),u(),d(6,"button",18),$("click",function(){let i=ne(e).$index,o=T(2);return ae(o.removeGroup(i))}),d(7,"mat-icon"),c(8,"delete"),u()()(),d(9,"mat-form-field",2)(10,"mat-label"),c(11,"Group Members"),u(),d(12,"mat-select",19),ye(13,vb,2,2,"mat-option",4,zt),u()(),d(15,"mat-form-field",2)(16,"mat-label"),c(17,"Connection Mode"),u(),d(18,"mat-select",20),ye(19,bb,3,4,"mat-option",4,zt),u()()()}if(n&2){let e=a.$index,t=T(2);R("formGroupName",e),f(13),Ae(t.discoveredSolarIds()),f(6),Ae(t.connectionModes)}}function Ab(n,a){if(n&1){let e=we();O(0,"mat-divider"),d(1,"div",1)(2,"div",11)(3,"h3"),c(4,"Charger Groups"),u(),d(5,"button",12),$("click",function(){ne(e);let i=T();return ae(i.addGroup())}),c(6," Add Group "),u()(),d(7,"div",13),I(8,fb,2,0,"div",5),ye(9,yb,21,1,"div",14,Re),u()()}if(n&2){let e=T();f(8),P(e.hasGroups()?-1:8),f(),Ae(e.groupsFormArray.controls)}}var Wm=(()=>{class n{connectionModes=["parallel","series"];formGroupName=x.required();rootFormGroup=A(rt);discovery=A(Mo);data=A(st);destroyRef=A(Ie);solarFormGroup;trackedDevicesControl;groupsFormArray;optionsByIdGroup;discoveredSolarIds=w([]);discoveredTrackedDevices=w([]);selectedTrackedDeviceIds=w([]);hasGroups=L(()=>this.groupsFormArray?.length>0);supportsGroups=L(()=>!!this.groupsFormArray);optionIds=L(()=>{let e=this.selectedTrackedDeviceIds(),t=this.discoveredSolarIds(),i=Object.keys(this.optionsByIdGroup?.controls??{});return e.length?[...new Set([...e,...i.filter(o=>e.includes(o))])].sort():[...new Set([...i,...t])].sort()});discoveryToken;ngOnInit(){this.solarFormGroup=this.rootFormGroup.control.get(this.formGroupName()),this.solarFormGroup&&(this.ensureOptionsGroup(),this.ensureTrackedControl(),this.ensureGroupsArray(),this.initializeDiscovery())}ngOnDestroy(){this.discoveryToken&&this.discovery.unregister(this.discoveryToken)}ensureSolarOption(e){this.optionsByIdGroup.get(e)||this.optionsByIdGroup.addControl(e,this.createOptionGroup({arrayRatedPowerW:null}))}compareTrackedDevice(e,t){return!e||!t?e===t:e.key===t.key}ensureTrackedControl(){let e=this.solarFormGroup.get("trackedDevices");if(e instanceof We){this.trackedDevicesControl=e,this.trackedDevicesControl.setValue(this.normalizeTrackedDeviceArray(this.trackedDevicesControl.value),{emitEvent:!1}),this.syncSelectedTrackedDeviceIds(this.trackedDevicesControl.value),this.trackedDevicesControl.valueChanges.pipe(De(this.destroyRef)).subscribe(t=>this.syncSelectedTrackedDeviceIds(t));return}this.trackedDevicesControl=new We([]),this.solarFormGroup.addControl("trackedDevices",this.trackedDevicesControl),this.syncSelectedTrackedDeviceIds(this.trackedDevicesControl.value),this.trackedDevicesControl.valueChanges.pipe(De(this.destroyRef)).subscribe(t=>this.syncSelectedTrackedDeviceIds(t))}ensureGroupsArray(){let e=this.solarFormGroup.get("groups")??this.solarFormGroup.get("banks");if(!e)return;if(e instanceof so||e instanceof Pn){this.groupsFormArray=e,this.solarFormGroup.get("groups")||this.solarFormGroup.setControl("groups",this.groupsFormArray);return}let t=Array.isArray(e?.value)?e.value:[];this.groupsFormArray=new Pn(t.map(i=>this.createGroup(i))),this.solarFormGroup.setControl("groups",this.groupsFormArray)}ensureOptionsGroup(){let e=this.solarFormGroup.get("optionsById");if(e instanceof Xi){this.optionsByIdGroup=e,this.syncOptionControlStates();return}this.optionsByIdGroup=new Xi({}),this.solarFormGroup.addControl("optionsById",this.optionsByIdGroup),this.syncOptionControlStates()}addGroup(){let e={id:`solar-bank-${Date.now()}`,name:"New Group",memberIds:[],connectionMode:"parallel"};this.groupsFormArray.push(this.createGroup(e)),this.groupsFormArray.markAsDirty()}removeGroup(e){this.groupsFormArray.removeAt(e),this.groupsFormArray.markAsDirty()}createGroup(e){return new Xi({id:new We(e.id,mt.required),name:new We(e.name,mt.required),memberIds:new We(e.memberIds??[]),connectionMode:new We(e.connectionMode??"parallel",mt.required)})}createOptionGroup(e){return new Xi({arrayRatedPowerW:new We(e.arrayRatedPowerW)})}initializeDiscovery(){this.discoveryToken=this.discovery.register({id:"solar-chargers",patterns:["self.electrical.solar.*"],contextTypes:["self"],pathPrefixes:["electrical.solar."]}),this.updateDiscoveredSolarIds(),this.discovery.changes(this.discoveryToken).pipe(De(this.destroyRef)).subscribe(()=>this.updateDiscoveredSolarIds())}updateDiscoveredSolarIds(){if(!this.discoveryToken)return;let e=new Set([...Array.from(this.discovery.activePaths(this.discoveryToken)),...this.data.getCachedPaths(!0)]),t=Array.from(e).map(s=>this.extractSolarId(s)).filter(s=>!!s),i=[...new Set(t)].sort(),o=new Map;Array.from(e).forEach(s=>{let l=this.extractSolarId(s);if(!l)return;let m=this.data.getPathObject(s),h=Object.keys(m?.sources??{});o.has(l)||o.set(l,new Set);let v=o.get(l);v&&h.forEach(y=>{let C=y.trim();C&&v.add(C)})});let r=new Map;i.forEach(s=>{let l=o.get(s);(l&&l.size>0?[...l].sort((h,v)=>h.localeCompare(v)):["default"]).forEach(h=>{let v=`${s}||${h}`;r.set(v,{id:s,source:h,key:v})})});for(let s of i)this.ensureSolarOption(s);this.discoveredSolarIds.set(i),this.discoveredTrackedDevices.set([...r.values()].sort((s,l)=>s.key.localeCompare(l.key))),this.syncOptionControlStates()}syncSelectedTrackedDeviceIds(e){let t=[...new Set(this.normalizeTrackedDeviceArray(e).map(i=>i.id))].sort();t.forEach(i=>this.ensureSolarOption(i)),this.selectedTrackedDeviceIds.set(t),this.syncOptionControlStates()}syncOptionControlStates(){if(!this.optionsByIdGroup)return;let e=new Set(this.optionIds());Object.entries(this.optionsByIdGroup.controls).forEach(([t,i])=>{let o=i.get("arrayRatedPowerW");o instanceof We&&(e.has(t)?(o.setValidators([mt.required,mt.min(0)]),o.enable({emitEvent:!1})):(o.clearValidators(),o.disable({emitEvent:!1})),o.updateValueAndValidity({emitEvent:!1}))}),this.optionsByIdGroup.updateValueAndValidity({emitEvent:!1}),this.solarFormGroup.updateValueAndValidity({emitEvent:!1})}extractSolarId(e){let t=e.match(/^self\.electrical\.solar\.([^.]+)(?:\.|$)/);return t?t[1]:null}normalizeTrackedDeviceArray(e){if(!Array.isArray(e))return[];let t=new Map;return e.forEach(i=>{if(typeof i=="string"){let m=i.trim();if(!m)return;let h=`${m}||default`;t.set(h,{id:m,source:"default",key:h});return}if(!i||typeof i!="object")return;let o=i,r=typeof o.id=="string"?o.id.trim():"",s=typeof o.source=="string"?o.source.trim():"default";if(!r||!s)return;let l=typeof o.key=="string"&&o.key.trim().length>0?o.key.trim():`${r}||${s}`;t.set(l,{id:r,source:s,key:l})}),[...t.values()].sort((i,o)=>i.key.localeCompare(o.key))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["solar-charger-setup"]],inputs:{formGroupName:[1,"formGroupName"]},decls:23,vars:4,consts:[[1,"solar-config",3,"formGroup"],[1,"solar-config-section"],["appearance","outline",1,"full-width"],["formControlName","trackedDevices","multiple","",3,"compareWith"],[3,"value"],[1,"hint"],["formGroupName","optionsById",1,"solar-config-section"],[1,"option-list"],[1,"option-card",3,"formGroupName"],[1,"option-title"],["matInput","","type","number","required","","min","0","formControlName","arrayRatedPowerW","placeholder","e.g. 800"],[1,"section-header"],["mat-stroked-button","","type","button",3,"click"],["formArrayName","groups",1,"bank-list"],[1,"bank-card",3,"formGroupName"],[1,"bank-row"],["appearance","outline",1,"bank-name"],["matInput","","formControlName","name"],["mat-icon-button","","type","button","aria-label","Remove group",3,"click"],["formControlName","memberIds","multiple",""],["formControlName","connectionMode"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1)(2,"h3"),c(3,"Tracked Solar Chargers"),u(),d(4,"mat-form-field",2)(5,"mat-label"),c(6,"Charger Instances"),u(),d(7,"mat-select",3),ye(8,hb,2,3,"mat-option",4,mb),u()(),d(10,"div",5),c(11,"Leave empty to display all discovered chargers."),u()(),O(12,"mat-divider"),d(13,"div",6)(14,"h3"),c(15,"Solar Array Rated Power"),u(),d(16,"div",5),c(17,"Set each charger's panel/array rated capacity in watts (W)."),u(),d(18,"div",7),I(19,pb,2,0,"div",5),ye(20,gb,7,2,"div",8,zt),u()(),I(22,Ab,11,1),u()),t&2&&(R("formGroup",i.solarFormGroup),f(7),R("compareWith",i.compareTrackedDevice),f(),Ae(i.discoveredTrackedDevices()),f(11),P(i.optionIds().length?-1:19),f(),Ae(i.optionIds()),f(2),P(i.supportsGroups()?22:-1))},dependencies:[yt,bt,Oi,ot,Mt,Pt,vn,rt,Jt,lo,co,qt,Ct,At,$t,xt,gi,jt,Rt,Wi,Li,et,vt,_t,Xe,je,hn],styles:["[_nghost-%COMP%]{display:block;width:100%}.solar-config[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:12px 4px}.solar-config-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.full-width[_ngcontent-%COMP%]{width:100%}.option-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.option-card[_ngcontent-%COMP%]{border:1px solid var(--kip-widget-card-border-color);border-radius:12px;padding:12px;background:var(--kip-contrast-dimmer-color);display:flex;flex-direction:column;gap:10px}.option-title[_ngcontent-%COMP%]{font-weight:600;font-size:14px}.hint[_ngcontent-%COMP%]{font-size:12px;opacity:.7}"]})}return n})();var Cb=(n,a)=>a.key,xb=(n,a)=>a.value;function Sb(n,a){if(n&1&&(d(0,"mat-option",3),c(1),u()),n&2){let e=a.$implicit,t=T();R("value",e),f(),Q(t.isSourceAwareFamily()?e.id+" ("+e.source+")":e.id)}}function wb(n,a){n&1&&(d(0,"div",4),c(1,"No groups configured."),u())}function _b(n,a){if(n&1&&(d(0,"mat-option",3),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),Q(e)}}function Mb(n,a){if(n&1&&(d(0,"mat-option",3),c(1),u()),n&2){let e=a.$implicit;R("value",e.value),f(),Q(e.label)}}function Tb(n,a){if(n&1){let e=we();d(0,"div",7)(1,"div",8)(2,"mat-form-field")(3,"mat-label"),c(4,"Group id"),u(),O(5,"input",9),u(),d(6,"mat-form-field")(7,"mat-label"),c(8,"Name"),u(),O(9,"input",10),u(),d(10,"mat-form-field")(11,"mat-label"),c(12,"Connection"),u(),d(13,"mat-select",11),ye(14,_b,2,2,"mat-option",3,zt),u()(),d(16,"button",12),$("click",function(){let i=ne(e).$index,o=T(2);return ae(o.removeGroup(i))}),d(17,"mat-icon"),c(18,"delete"),u()()(),d(19,"mat-form-field",1)(20,"mat-label"),c(21,"Members"),u(),d(22,"mat-select",13),ye(23,Mb,2,2,"mat-option",3,xb),u()()()}if(n&2){let e=a.$implicit,t=T(2);R("formGroup",e),f(14),Ae(t.connectionModes),f(9),Ae(t.memberOptions())}}function kb(n,a){if(n&1){let e=we();O(0,"mat-divider",1),d(1,"div",5)(2,"h3"),c(3),u(),d(4,"button",6),$("click",function(){ne(e);let i=T();return ae(i.addGroup())}),d(5,"mat-icon"),c(6,"add"),u(),c(7," Add group "),u()(),I(8,wb,2,0,"div",4),ye(9,Tb,25,1,"div",7,Re)}if(n&2){let e=T();f(3),be("",e.setupLabel()," Groups"),f(5),P(e.hasGroups()?-1:8),f(),Ae(e.groupsFormArray.controls)}}var Is=class n{connectionModes=["parallel","series"];formGroupName=x.required();setupLabel=x.required();discoveryId=x.required();discoveryPattern=x.required();familyRegex=x.required();pathPrefix=x.required();rootFormGroup=A(rt);discovery=A(Mo);data=A(st);destroyRef=A(Ie);static SOURCE_AWARE_FAMILIES=new Set(["charger","inverter","alternator","ac"]);familyFormGroup;trackedDevicesControl;groupsFormArray;discoveredIds=w([]);discoveredTrackedDevices=w([]);isSourceAwareFamily=L(()=>n.SOURCE_AWARE_FAMILIES.has(this.formGroupName().trim()));memberOptions=L(()=>this.isSourceAwareFamily()?this.discoveredTrackedDevices().map(a=>({value:a.key,label:`${a.id} (${a.source})`})):this.discoveredIds().map(a=>({value:a,label:a})));hasGroups=L(()=>this.groupsFormArray?.length>0);supportsGroups=L(()=>!!this.groupsFormArray);discoveryToken;static FAMILY_CRITERIA={charger:{patterns:["self.electrical.charger*"],pathPrefixes:["electrical.charger"],idRegex:/self\.electrical\.chargers?\.([^.]+)(?:\.|$)/},inverter:{patterns:["self.electrical.inverter*"],pathPrefixes:["electrical.inverter"],idRegex:/self\.electrical\.inverters?\.([^.]+)(?:\.|$)/},alternator:{patterns:["self.electrical.alternator*"],pathPrefixes:["electrical.alternator"],idRegex:/self\.electrical\.alternators?\.([^.]+)(?:\.|$)/},ac:{patterns:["self.electrical.ac*"],pathPrefixes:["electrical.ac."],idRegex:/self\.electrical\.ac\.([^.]+)(?:\.|$)/}};ngOnInit(){this.familyFormGroup=this.rootFormGroup.control.get(this.formGroupName()),this.familyFormGroup&&(this.ensureTrackedControl(),this.ensureGroupsArray(),this.initializeDiscovery())}ngOnDestroy(){this.discoveryToken&&this.discovery.unregister(this.discoveryToken)}addGroup(){let e={id:`${this.setupLabel().toLowerCase().replace(/\s+/g,"-")}-group-${Date.now()}`,name:`${this.setupLabel()} Group`,memberIds:[],connectionMode:"parallel"};this.groupsFormArray.push(this.createGroup(e)),this.groupsFormArray.markAsDirty()}removeGroup(a){this.groupsFormArray.removeAt(a),this.groupsFormArray.markAsDirty()}compareTrackedDevice(a,e){return!a&&!e?!0:!a||!e?!1:a.key===e.key}ensureTrackedControl(){let a=this.familyFormGroup.get("trackedDevices");if(a instanceof We){this.trackedDevicesControl=a,this.trackedDevicesControl.setValue(this.normalizeTrackedDeviceArray(this.trackedDevicesControl.value),{emitEvent:!1});return}this.trackedDevicesControl=new We([]),this.familyFormGroup.addControl("trackedDevices",this.trackedDevicesControl),this.trackedDevicesControl.setValue(this.normalizeTrackedDeviceArray(this.trackedDevicesControl.value),{emitEvent:!1})}ensureGroupsArray(){let a=this.familyFormGroup.get("groups")??this.familyFormGroup.get("banks");if(!a)return;if(a instanceof so||a instanceof Pn){this.groupsFormArray=a,this.familyFormGroup.get("groups")||this.familyFormGroup.setControl("groups",this.groupsFormArray);return}let e=Array.isArray(a?.value)?a.value:[];this.groupsFormArray=new Pn(e.map(t=>this.createGroup(t))),this.familyFormGroup.setControl("groups",this.groupsFormArray)}createGroup(a){return new Xi({id:new We(a.id,mt.required),name:new We(a.name,mt.required),memberIds:new We(a.memberIds??[]),connectionMode:new We(a.connectionMode??"parallel",mt.required)})}initializeDiscovery(){let a=this.resolveCriteria();this.discoveryToken=this.discovery.register({id:this.discoveryId(),patterns:a.patterns,contextTypes:["self"],pathPrefixes:a.pathPrefixes}),this.updateDiscoveredIds(),this.discovery.changes(this.discoveryToken).pipe(De(this.destroyRef)).subscribe(()=>this.updateDiscoveredIds()),this.isSourceAwareFamily()&&this.data.observePathUpdates().pipe(De(this.destroyRef)).subscribe(e=>{e.kind!=="data"||!this.matchesDiscoveryPath(e.fullPath)||this.updateDiscoveredIds()})}matchesDiscoveryPath(a){return a?this.resolveCriteria().idRegex.test(a):!1}updateDiscoveredIds(){if(!this.discoveryToken)return;let a=this.resolveCriteria().idRegex,e=new Set([...Array.from(this.discovery.activePaths(this.discoveryToken)),...this.data.getCachedPaths(!0)]),t=new Set,i=new Map;Array.from(e).forEach(r=>{let s=a.exec(r),l=s?s[1]:null;if(!l)return;t.add(l),i.has(l)||i.set(l,new Set);let m=this.data.getPathObject(r),h=Object.keys(m?.sources??{}),v=i.get(l);v&&h.forEach(y=>{let C=y.trim();C&&v.add(C)})});let o=[...t].sort((r,s)=>r.localeCompare(s));if(this.discoveredIds.set(o),this.isSourceAwareFamily()){let r=new Map;o.forEach(s=>{let l=i.get(s);(l&&l.size>0?[...l].sort((h,v)=>h.localeCompare(v)):["default"]).forEach(h=>{let v=`${s}||${h}`;r.set(v,{id:s,source:h,key:v})})}),this.discoveredTrackedDevices.set([...r.values()].sort((s,l)=>s.key.localeCompare(l.key)));return}this.discoveredTrackedDevices.set(o.map(r=>({id:r,source:"default",key:`${r}||default`})).sort((r,s)=>r.key.localeCompare(s.key)))}normalizeTrackedDeviceArray(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(typeof t=="string"){let l=t.trim();if(!l)return;let m=`${l}||default`;e.set(m,{id:l,source:"default",key:m});return}if(!t||typeof t!="object")return;let i=t,o=typeof i.id=="string"?i.id.trim():"",r=typeof i.source=="string"?i.source.trim():"default";if(!o||!r)return;let s=typeof i.key=="string"&&i.key.trim().length>0?i.key.trim():`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}resolveCriteria(){let a=this.formGroupName().trim(),e=n.FAMILY_CRITERIA[a];return e||{patterns:[this.discoveryPattern()],pathPrefixes:[this.pathPrefix()],idRegex:new RegExp(this.familyRegex())}}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["electrical-family-setup"]],inputs:{formGroupName:[1,"formGroupName"],setupLabel:[1,"setupLabel"],discoveryId:[1,"discoveryId"],discoveryPattern:[1,"discoveryPattern"],familyRegex:[1,"familyRegex"],pathPrefix:[1,"pathPrefix"]},decls:12,vars:6,consts:[[1,"family-setup-grid"],[1,"span-2"],["multiple","",3,"formControl","compareWith"],[3,"value"],[1,"hint","span-2"],[1,"groups-header","span-2"],["mat-stroked-button","","type","button",3,"click"],[1,"group-card","span-2",3,"formGroup"],[1,"group-grid"],["matInput","","formControlName","id"],["matInput","","formControlName","name"],["formControlName","connectionMode"],["mat-icon-button","","type","button","color","warn","aria-label","Remove group",3,"click"],["formControlName","memberIds","multiple",""]],template:function(e,t){e&1&&(d(0,"div",0)(1,"h3"),c(2),u(),d(3,"mat-form-field",1)(4,"mat-label"),c(5),u(),d(6,"mat-select",2),ye(7,Sb,2,2,"mat-option",3,Cb),u()(),d(9,"div",4),c(10),u(),I(11,kb,11,2),u()),e&2&&(f(2),be("Tracked ",t.setupLabel()),f(3),be("",t.setupLabel()," Instances"),f(),R("formControl",t.trackedDevicesControl)("compareWith",t.compareTrackedDevice),f(),Ae(t.discoveredTrackedDevices()),f(3),be(" Leave empty to display all discovered ",t.setupLabel().toLowerCase(),". "),f(),P(t.supportsGroups()?11:-1))},dependencies:[yt,bt,ot,Mt,Vi,rt,Jt,qt,Ct,At,$t,xt,gi,jt,Rt,Wi,Li,et,vt,_t,Xe,je],styles:["[_nghost-%COMP%]{display:block;width:100%}.family-setup-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:12px 4px}.span-2[_ngcontent-%COMP%]{grid-column:span 2}.hint[_ngcontent-%COMP%]{color:var(--kip-contrast-dim-color);font-size:.8rem}.groups-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.groups-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;color:var(--kip-contrast-color);font-size:.95rem}.group-card[_ngcontent-%COMP%]{border:1px solid var(--kip-widget-card-border-color);border-radius:8px;padding:10px;background:var(--kip-widget-card-background-color)}.group-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) auto;gap:8px}"]})};var Fm=()=>["measuring","capacity"],Db=()=>["marineCompass","baseplateCompass"],Eb=()=>["measuring"];function Ib(n,a){if(n&1&&O(0,"config-display-chart-options",5),n&2){let e=T();R("displayName",e.displayNameToControl)("datasetUUID",e.datasetUUIDToControl)("convertUnitTo",e.convertUnitToControl)("showDataPoints",e.showDataPointsToControl)("showAverageData",e.showAverageDataToControl)("trackAgainstAverage",e.trackAgainstAverageToControl)("datasetAverageArray",e.datasetAverageArrayToControl)("showDatasetMinimumValueLine",e.showDatasetMinimumValueLineToControl)("showDatasetMaximumValueLine",e.showDatasetMaximumValueLineToControl)("showDatasetAverageValueLine",e.showDatasetAverageValueLineToControl)("showDatasetAngleAverageValueLine",e.showDatasetAngleAverageValueLineToControl)("startScaleAtZero",e.startScaleAtZeroToControl)("showLabel",e.showLabelToControl)("showTimeScale",e.showTimeScaleToControl)("showYScale",e.showYScaleToControl)("yScaleSuggestedMin",e.yScaleSuggestedMinToControl)("yScaleSuggestedMax",e.yScaleSuggestedMaxToControl)("enableMinMaxScaleLimit",e.enableMinMaxScaleLimitToControl)("yScaleMin",e.yScaleMinToControl)("yScaleMax",e.yScaleMaxToControl)("numDecimal",e.numDecimalToControl)("verticalChart",e.verticalChartToControl)("inverseYAxis",e.inverseYAxisToControl)("color",e.colorToControl)}}function Pb(n,a){n&1&&O(0,"select-autopilot",6)}function Rb(n,a){n&1&&(d(0,"mat-form-field",23)(1,"mat-label"),c(2,"URL"),u(),O(3,"input",48),u())}function Nb(n,a){n&1&&(d(0,"mat-checkbox",24),c(1," Allow pointer events on embedded content. WARNING: this may prevent swipe gestures over the Embed widget or keyboard events, while the focus is in the embed, from triggering normal KIP interactions. "),u())}function Ob(n,a){n&1&&(d(0,"div",49)(1,"div",50)(2,"mat-form-field",51)(3,"mat-label"),c(4,"Widget Label"),u(),O(5,"input",52),u()(),d(6,"div",50)(7,"mat-checkbox",53),c(8," Show Label "),u()()())}function Vb(n,a){n&1&&(d(0,"mat-form-field",23)(1,"mat-label"),c(2,"Widget Label"),u(),O(3,"input",52),u())}function Lb(n,a){if(n&1&&I(0,Ob,9,0,"div",49)(1,Vb,4,0,"mat-form-field",23),n&2){let e=T(2);P((e.widgetConfig==null?null:e.widgetConfig.showLabel)!==void 0?0:1)}}function Wb(n,a){n&1&&(d(0,"mat-form-field",54)(1,"mat-label"),c(2,"Scale Start"),u(),O(3,"input",55),u(),d(4,"mat-form-field",54)(5,"mat-label"),c(6,"Scale End"),u(),O(7,"input",56),u())}function Fb(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Integer Places"),u(),O(3,"input",57),u())}function Bb(n,a){if(n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Decimal Places"),u(),O(3,"input",58),u()),n&2){let e=T(2);ct(e.widgetConfig.showMiniChart!==void 0?"options-grid-span2":"")}}function Gb(n,a){n&1&&(d(0,"mat-checkbox",26),c(1," Show Min recorded value "),u())}function zb(n,a){n&1&&(d(0,"mat-checkbox",27),c(1," Show Max recorded value "),u())}function Ub(n,a){if(n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Next Dashboard after start"),u(),O(3,"input",59),u()),n&2){let e=T(2);dt("options-grid-span2",!e.widgetConfig.numInt)}}function Hb(n,a){if(n&1&&(d(0,"mat-option",62),c(1),u()),n&2){let e=a.$implicit;R("value",e.measure),f(),be(" ",e.description," ")}}function qb(n,a){if(n&1&&(d(0,"mat-optgroup",61),ye(1,Hb,2,2,"mat-option",62,Re),u()),n&2){let e=T().$implicit;R("label",e.group),f(),Ae(e.units)}}function $b(n,a){if(n&1&&I(0,qb,3,1,"mat-optgroup",61),n&2){let e=a.$implicit,t=T(3);P(!t.widgetConfig.convertUnitToGroup||t.widgetConfig.convertUnitToGroup===""||t.widgetConfig.convertUnitToGroup===e.group?0:-1)}}function jb(n,a){if(n&1&&(d(0,"mat-form-field",29)(1,"mat-label"),c(2,"Display Units"),u(),d(3,"mat-select",60),ye(4,$b,1,1,null,null,Re),u()()),n&2){let e=T(2);f(4),Ae(e.unitList.conversions)}}function Yb(n,a){n&1&&(d(0,"mat-checkbox",30),c(1," Enable beeps on count down "),u())}function Kb(n,a){if(n&1&&O(0,"display-datetime-options",31),n&2){let e=T(2);R("dateFormat",e.dateFormatToControl)("dateTimezone",e.dateTimezoneToControl)}}function Xb(n,a){n&1&&(d(0,"mat-checkbox",32),c(1," Enable Advanced Compass Mode "),u())}function Zb(n,a){n&1&&(d(0,"mat-checkbox",33),c(1," Close-hauled Lines "),u())}function Qb(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Optimal Close-hauled Angle"),u(),O(3,"input",63),u())}function Jb(n,a){n&1&&(d(0,"mat-checkbox",34),c(1," Wind Sectors "),u())}function e1(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Sector Duration (sec)"),u(),O(3,"input",64),u())}function t1(n,a){n&1&&(d(0,"mat-checkbox",35),c(1," Apparent Wind Speed Value "),u())}function i1(n,a){n&1&&(d(0,"mat-checkbox",36),c(1," True Wind Speed Value "),u())}function n1(n,a){n&1&&(d(0,"mat-checkbox",37),c(1," Course Over Ground "),u())}function a1(n,a){n&1&&(d(0,"mat-checkbox",38),c(1," True Wind Angle Indicator "),u())}function o1(n,a){n&1&&(d(0,"mat-checkbox",39),c(1," Next Waypoint "),u())}function r1(n,a){n&1&&(d(0,"mat-checkbox",40),c(1," Drift "),u())}function s1(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Minimum Value"),u(),O(3,"input",65),u())}function l1(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Maximum Value"),u(),O(3,"input",66),u())}function d1(n,a){n&1&&(d(0,"mat-checkbox",41),c(1," Ignore Zones configuration "),u())}function c1(n,a){n&1&&(d(0,"div",67)(1,"mat-checkbox",68),c(2," Show Heeling Side Label "),u()(),d(3,"div",67)(4,"mat-checkbox",69),c(5," Reverse Angle "),u()())}function u1(n,a){n&1&&(d(0,"div",67)(1,"mat-checkbox",72),c(2," Show Progress Bar "),u()(),d(3,"div",42)(4,"mat-checkbox",73),c(5," Show Ticks "),u()())}function m1(n,a){n&1&&(d(0,"div",67)(1,"mat-checkbox",73),c(2," Show Ticks "),u()())}function h1(n,a){if(n&1&&(d(0,"mat-form-field",67)(1,"mat-label"),c(2,"Highlights Width"),u(),O(3,"input",70),u(),d(4,"div",67)(5,"mat-checkbox",71),c(6," Show Needle Indicator "),u()(),I(7,u1,6,0)(8,m1,3,0,"div",67)),n&2){let e=T(2);f(7),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="ngRadial"?7:8)}}function p1(n,a){n&1&&(d(0,"mat-form-field",42)(1,"mat-label"),c(2,"Rotation Element"),u(),d(3,"mat-select",74)(4,"mat-option",75),c(5,"Dial (Marine Compass)"),u(),d(6,"mat-option",76),c(7,"Needle (Base plate compass)"),u()()(),d(8,"div",67)(9,"mat-checkbox",77),c(10," Show value box "),u()(),d(11,"div",67)(12,"mat-checkbox",78),c(13," Show cardinal degrees "),u()())}function g1(n,a){n&1&&(d(0,"mat-form-field",67)(1,"mat-label"),c(2,"Progress Bar Start Position"),u(),d(3,"mat-select",81)(4,"mat-option",82),c(5,"Left"),u(),d(6,"mat-option",83),c(7,"Middle"),u(),d(8,"mat-option",84),c(9,"Right"),u()()())}function f1(n,a){n&1&&(d(0,"mat-form-field",67)(1,"mat-label"),c(2,"Progress Bar Start Angle"),u(),O(3,"input",85),u())}function v1(n,a){if(n&1&&(d(0,"mat-form-field",67)(1,"mat-label"),c(2,"Gauge Type"),u(),d(3,"mat-select",74)(4,"mat-option",79),c(5,"Measuring"),u(),d(6,"mat-option",80),c(7,"Capacity"),u()()(),I(8,g1,10,0,"mat-form-field",67),I(9,f1,4,0,"mat-form-field",67)),n&2){let e=T(3);f(8),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="ngRadial"&&tr(2,Eb).includes(e.formMaster.value.gauge.subType)?8:-1),f(),P(e.formMaster.value.gauge.subType==="capacity"?9:-1)}}function b1(n,a){if(n&1&&I(0,p1,14,0)(1,v1,10,3),n&2){let e=T(2);P(tr(1,Db).indexOf(e.formMaster.value.gauge.subType)>-1?0:tr(2,Fm).indexOf(e.formMaster.value.gauge.subType)>-1?1:-1)}}function y1(n,a){n&1&&(d(0,"mat-form-field",42)(1,"mat-label"),c(2,"Orientation"),u(),d(3,"mat-select",86)(4,"mat-option",87),c(5,"Vertical"),u(),d(6,"mat-option",88),c(7,"Horizontal"),u()()())}function A1(n,a){n&1&&(d(0,"mat-form-field",42)(1,"mat-label"),c(2,"Unit Label"),u(),d(3,"mat-select",89)(4,"mat-option",90),c(5,"Full Label"),u(),d(6,"mat-option",91),c(7,"First Letter Only"),u()()())}function C1(n,a){if(n&1&&(d(0,"mat-option",62),c(1),u()),n&2){let e=a.$implicit;R("value",Yi(e.value)),f(),Q(e.label)}}function x1(n,a){if(n&1&&(d(0,"mat-form-field",23)(1,"mat-label"),c(2,"Color"),u(),d(3,"mat-select",92),ye(4,C1,2,3,"mat-option",62,Re),u()()),n&2){let e=T(2);f(4),Ae(e.colors)}}function S1(n,a){n&1&&(d(0,"mat-form-field",23)(1,"mat-label"),c(2,"Scale Span"),u(),d(3,"mat-select",93)(4,"mat-option",94),c(5,"1 Minute"),u(),d(6,"mat-option",95),c(7,"5 Minutes"),u(),d(8,"mat-option",96),c(9,"30 Minutes"),u()()(),d(10,"div",97)(11,"strong"),c(12,"History API:"),u(),c(13," Wind Trends can be pre-filled with historical data from the Signal K History API. "),d(14,"a",98),c(15,"Learn more"),u()())}function w1(n,a){n&1&&(d(0,"mat-checkbox",43),c(1," Show Background Graph "),d(2,"i"),c(3,"(Too many graphs may affect performance)"),u()())}function _1(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Suggested Scale Start"),u(),O(3,"input",99),u())}function M1(n,a){n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Suggested Scale End"),u(),O(3,"input",100),u())}function T1(n,a){n&1&&(d(0,"mat-checkbox",44),c(1," Inverse Scale Axis "),u())}function k1(n,a){n&1&&(d(0,"mat-checkbox",45),c(1," Vertical Data Graph "),u())}function D1(n,a){n&1&&(d(0,"mat-checkbox",46),c(1," Disable background color "),u())}function E1(n,a){if(n&1&&(d(0,"mat-option",62),c(1),u()),n&2){let e=a.$implicit;R("value",Yi(e.value)),f(),Q(e.label)}}function I1(n,a){if(n&1&&(d(0,"mat-form-field")(1,"mat-label"),c(2,"Background Color"),u(),d(3,"mat-select",101),ye(4,E1,2,3,"mat-option",62,Re),u()()),n&2){let e=T(2);f(4),Ae(e.colors)}}function P1(n,a){n&1&&(un(0,47),d(1,"mat-form-field")(2,"mat-label"),c(3,"View Mode"),u(),d(4,"mat-select",102)(5,"mat-option",103),c(6,"North Up"),u(),d(7,"mat-option",104),c(8,"Course Up"),u()()(),d(9,"mat-form-field")(10,"mat-label"),c(11,"Fully Visible Rings Range"),u(),d(12,"mat-select",105)(13,"mat-option",106),c(14,"1 miles"),u(),d(15,"mat-option",107),c(16,"3 miles"),u(),d(17,"mat-option",108),c(18,"6 miles"),u(),d(19,"mat-option",109),c(20,"12 miles"),u(),d(21,"mat-option",110),c(22,"24 miles"),u(),d(23,"mat-option",111),c(24,"48 miles"),u()()(),d(25,"mat-checkbox",112),c(26," Plot target COG vector "),u(),d(27,"mat-form-field")(28,"mat-label"),c(29,"COG plot length (minutes)"),u(),O(30,"input",113),u(),d(31,"mat-checkbox",114),c(32," Show unconfirmed targets "),u(),d(33,"mat-checkbox",115),c(34," Show lost targets "),u(),d(35,"mat-checkbox",116),c(36," Show own ship icon "),u(),mn())}function R1(n,a){n&1&&(d(0,"mat-form-field",67)(1,"mat-label"),c(2,"Background Style"),u(),d(3,"mat-select",129)(4,"mat-option",130),c(5,"Dark Gray"),u(),d(6,"mat-option",131),c(7,"Satin Gray"),u(),d(8,"mat-option",132),c(9,"Light Gray"),u(),d(10,"mat-option",133),c(11,"White"),u(),d(12,"mat-option",134),c(13,"Black"),u(),d(14,"mat-option",135),c(15,"Beige"),u(),d(16,"mat-option",136),c(17,"Brown"),u(),d(18,"mat-option",137),c(19,"Red"),u(),d(20,"mat-option",138),c(21,"Green"),u(),d(22,"mat-option",139),c(23,"Blue"),u(),d(24,"mat-option",125),c(25,"Anthracite"),u(),d(26,"mat-option",140),c(27,"Mud"),u(),d(28,"mat-option",141),c(29,"Punched Sheet"),u(),d(30,"mat-option",142),c(31,"Carbon"),u(),d(32,"mat-option",143),c(33,"Stainless"),u(),d(34,"mat-option",144),c(35,"Brushed Metal"),u(),d(36,"mat-option",145),c(37,"Brushed Stainless"),u(),d(38,"mat-option",146),c(39,"Turned"),u()()())}function N1(n,a){n&1&&(d(0,"div",67)(1,"mat-checkbox",147),c(2," Reverse Pitch Axis "),u()(),d(3,"div",67)(4,"mat-checkbox",148),c(5," Reverse Roll Axis "),u()(),d(6,"div",67)(7,"mat-checkbox",149),c(8," Show Frame "),u()())}function O1(n,a){if(n&1&&(I(0,R1,40,0,"mat-form-field",67),I(1,N1,9,0),d(2,"mat-form-field",67)(3,"mat-label"),c(4,"Frame Style"),u(),d(5,"mat-select",117)(6,"mat-option",118),c(7,"Black Metal"),u(),d(8,"mat-option",119),c(9,"Metal"),u(),d(10,"mat-option",120),c(11,"Shiny Metal"),u(),d(12,"mat-option",121),c(13,"Brass"),u(),d(14,"mat-option",122),c(15,"Steel"),u(),d(16,"mat-option",123),c(17,"Chrome"),u(),d(18,"mat-option",124),c(19,"Gold"),u(),d(20,"mat-option",125),c(21,"Anthracite"),u(),d(22,"mat-option",126),c(23,"Tilted Gray"),u(),d(24,"mat-option",127),c(25,"Tilted Black"),u(),d(26,"mat-option",128),c(27,"Glossy Metal"),u()()()),n&2){let e=T(2);P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)!=="horizon"?0:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="horizon"?1:-1)}}function V1(n,a){if(n&1&&(d(0,"div",7)(1,"div",22),I(2,Rb,4,0,"mat-form-field",23),I(3,Nb,2,0,"mat-checkbox",24),I(4,Lb,2,1),I(5,Wb,8,0),I(6,Fb,4,0,"mat-form-field"),I(7,Bb,4,2,"mat-form-field",25),I(8,Gb,2,0,"mat-checkbox",26),I(9,zb,2,0,"mat-checkbox",27),I(10,Ub,4,2,"mat-form-field",28),I(11,jb,6,0,"mat-form-field",29),I(12,Yb,2,0,"mat-checkbox",30),I(13,Kb,1,2,"display-datetime-options",31),I(14,Xb,2,0,"mat-checkbox",32),I(15,Zb,2,0,"mat-checkbox",33),I(16,Qb,4,0,"mat-form-field"),I(17,Jb,2,0,"mat-checkbox",34),I(18,e1,4,0,"mat-form-field"),I(19,t1,2,0,"mat-checkbox",35),I(20,i1,2,0,"mat-checkbox",36),I(21,n1,2,0,"mat-checkbox",37),I(22,a1,2,0,"mat-checkbox",38),I(23,o1,2,0,"mat-checkbox",39),I(24,r1,2,0,"mat-checkbox",40),I(25,s1,4,0,"mat-form-field"),I(26,l1,4,0,"mat-form-field"),I(27,d1,2,0,"mat-checkbox",41),I(28,c1,6,0),I(29,h1,9,1),I(30,b1,2,3),I(31,y1,8,0,"mat-form-field",42),I(32,A1,8,0,"mat-form-field",42),I(33,x1,6,0,"mat-form-field",23),I(34,S1,16,0),I(35,w1,4,0,"mat-checkbox",43),I(36,_1,4,0,"mat-form-field"),I(37,M1,4,0,"mat-form-field"),I(38,T1,2,0,"mat-checkbox",44),I(39,k1,2,0,"mat-checkbox",45),I(40,D1,2,0,"mat-checkbox",46),I(41,I1,6,0,"mat-form-field"),I(42,P1,37,0,"ng-container",47),I(43,O1,28,2),u()()),n&2){let e=T();f(2),P((e.widgetConfig==null?null:e.widgetConfig.widgetUrl)!==void 0?2:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.allowInput)!==void 0?3:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.displayName)!==void 0?4:-1),f(),P(e.formMaster.get("displayScale")?5:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.numInt)!==void 0?6:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.numDecimal)!==void 0?7:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.showMin)!==void 0?8:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.showMax)!==void 0?9:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.nextDashboard)!==void 0?10:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.convertUnitTo)!==void 0?11:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.playBeeps)!==void 0?12:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.dateFormat)!==void 0?13:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.compassModeEnabled)!==void 0?14:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.laylineEnable)!==void 0?15:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.laylineEnable)!==void 0?16:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.windSectorEnable)!==void 0?17:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.windSectorEnable)!==void 0?18:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.awsEnable)!==void 0?19:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.twsEnable)!==void 0?20:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.courseOverGroundEnable)!==void 0?21:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.twaEnable)!==void 0?22:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.waypointEnable)!==void 0?23:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.driftEnable)!==void 0?24:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.minValue)!==void 0&&!e.formMaster.get("displayScale")?25:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.maxValue)!==void 0&&!e.formMaster.get("displayScale")?26:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.ignoreZones)!==void 0?27:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="angle"?28:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="ngRadial"&&tr(42,Fm).includes(e.formMaster.value.gauge.subType)||(e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="ngLinear"?29:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="ngRadial"?30:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="ngLinear"?31:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="simpleLinear"?32:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.color)!==void 0?33:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.timeScale)!==void 0?34:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.showMiniChart)!==void 0?35:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.yScaleMin)!==void 0?36:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.yScaleMax)!==void 0?37:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.inverseYAxis)!==void 0?38:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.verticalChart)!==void 0?39:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.noBgColor)!==void 0?40:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.bgColor)!==void 0?41:-1),f(),P((e.widgetConfig==null?null:e.widgetConfig.ais)!==void 0?42:-1),f(),P((e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="steel"||(e.widgetConfig==null||e.widgetConfig.gauge==null?null:e.widgetConfig.gauge.type)==="horizon"?43:-1)}}function L1(n,a){n&1&&(d(0,"mat-tab",8),O(1,"ais-target-options",47),u())}function W1(n,a){if(n&1&&(d(0,"span",153),c(1," error "),u(),c(2,"\xA0Controls ")),n&2){let e=T(2);_a(e.formMaster.controls.multiChildCtrls.valid?"display: none":"display: block")}}function F1(n,a){if(n&1){let e=we();d(0,"mat-tab",9)(1,"div",150)(2,"div"),Ai(3,W1,3,2,"ng-template",151),u(),d(4,"boolean-multicontrol-options",152),$("addPath",function(i){ne(e);let o=T();return ae(o.addPathGroup(i))})("updatePath",function(i){ne(e);let o=T();return ae(o.updatePath(i))})("delPath",function(i){ne(e);let o=T();return ae(o.deletePath(i))}),u()()()}if(n&2){let e=T();f(4),R("multiCtrlArray",e.multiChildCtrlsToControl)("zonesOnlyPaths",(e.widgetConfig==null?null:e.widgetConfig.zonesOnlyPaths)??!1)}}function B1(n,a){if(n&1&&(d(0,"span",153),c(1," error "),u(),c(2," \xA0Paths ")),n&2){let e=T(2);_a(e.formMaster.controls.paths.valid||e.formMaster.controls.paths.disabled?"display: none":"display: block")}}function G1(n,a){if(n&1&&(d(0,"mat-tab",10)(1,"div",150)(2,"div"),Ai(3,B1,3,2,"ng-template",151),u(),O(4,"paths-options",154),u()()),n&2){let e=T();f(4),R("isArray",e.isPathArray)("enableTimeout",e.enableTimeoutToControl)("dataTimeout",e.dataTimeoutToControl)("filterSelfPaths",e.filterSelfPathsToControl)("addPathEvent",e.addPathEvent)("delPathEvent",e.delPathEvent)("updatePathEvent",e.updatePathEvent)}}function z1(n,a){n&1&&(d(0,"p")(1,"mat-checkbox",157),c(2," Digital display "),u()())}function U1(n,a){n&1&&(d(0,"mat-form-field",23)(1,"mat-label"),c(2,"Dial Size"),u(),d(3,"mat-select",158)(4,"mat-option",159),c(5,"1/4"),u(),d(6,"mat-option",160),c(7,"1/2"),u(),d(8,"mat-option",161),c(9,"3/4"),u(),d(10,"mat-option",90),c(11,"Full"),u()()())}function H1(n,a){if(n&1&&(d(0,"mat-tab",11)(1,"div",7)(2,"mat-form-field",23)(3,"mat-label"),c(4,"Gauge Type"),u(),d(5,"mat-select",86)(6,"mat-option",155),c(7,"Linear"),u(),d(8,"mat-option",156),c(9,"Radial"),u()()(),I(10,z1,3,0,"p"),I(11,U1,12,0,"mat-form-field",23),u()()),n&2){let e=T();f(10),P(e.formMaster.value.gauge.subType==="linear"?10:-1),f(),P(e.formMaster.value.gauge.subType==="radial"?11:-1)}}function q1(n,a){n&1&&(d(0,"p")(1,"mat-checkbox",164),c(2," Value to send on button push (checked = on, unchecked = off) "),u()())}function $1(n,a){if(n&1&&(d(0,"mat-tab",12)(1,"div",150)(2,"p")(3,"mat-checkbox",162),c(4," Enable Put Requests "),u()(),d(5,"p")(6,"mat-checkbox",163),c(7," Momentary mode (instead of switching between on/off) "),u()(),I(8,q1,3,0,"p"),u()()),n&2){let e=T();f(8),P(e.formMaster.controls.putMomentary.value?8:-1)}}function j1(n,a){n&1&&O(0,"span",166)}function Y1(n,a){if(n&1&&(I(0,j1,1,0,"span",166),c(1," Dataset ")),n&2){let e=T(2);P(e.formMaster.controls.datachartPath.valid?-1:0)}}function K1(n,a){if(n&1&&(d(0,"mat-tab",13),Ai(1,Y1,2,1,"ng-template",151),O(2,"config-dataset-chart-options",165),u()),n&2){let e=T();f(2),R("filterSelfPaths",e.filterSelfPathsToControl)("datachartPath",e.datachartPathControl)("datachartSource",e.datachartSourceControl)("convertUnitTo",e.convertUnitToControl)("timeScale",e.timeScaleControl)("period",e.periodControl)}}function X1(n,a){n&1&&(d(0,"mat-tab",14),O(1,"bms-bank-setup",167),u())}function Z1(n,a){if(n&1&&(d(0,"span",153),c(1," error "),u(),c(2,"\xA0Solar Chargers ")),n&2){let e=T(2);_a(e.formMaster.controls.solarCharger.valid?"display: none":"display: block")}}function Q1(n,a){n&1&&(d(0,"mat-tab",15)(1,"div",150)(2,"div"),Ai(3,Z1,3,2,"ng-template",151),u(),O(4,"solar-charger-setup",168),u()())}function J1(n,a){n&1&&(d(0,"mat-tab",16),O(1,"electrical-family-setup",169),u())}function ey(n,a){n&1&&(d(0,"mat-tab",17),O(1,"electrical-family-setup",170),u())}function ty(n,a){n&1&&(d(0,"mat-tab",18),O(1,"electrical-family-setup",171),u())}function iy(n,a){n&1&&(d(0,"mat-tab",19),O(1,"electrical-family-setup",172),u())}var Bm=(()=>{class n{static KEY_MULTI_CHILD_CTRLS="multiChildCtrls";static KEY_DISPLAY_SCALE="displayScale";static KEY_GAUGE="gauge";static KEY_AUTOPILOT="autopilot";static KEY_PATHS="paths";static KEY_AIS="ais";static KEY_CONVERT_UNIT_TO="convertUnitTo";dialogRef=A(fn);fb=A(Zn);DatasetStreamService=A(Cn);units=A(He);app=A(Fi);destroyRef=A(Ie);widgetConfig=A(pi);titleDialog="Widget Options";formMaster;availableDataSets;unitList={};isPathArray=!1;addPathEvent;delPathEvent;updatePathEvent;colors=[];saveDisabled=w(!0);ngOnInit(){if(!this.widgetConfig){console.error("Widget configuration data is missing. Closing dialog."),this.dialogRef.close();return}this.availableDataSets=this.DatasetStreamService.list().sort((e,t)=>{let i=e.label||"",o=t.label||"";return i.localeCompare(o,void 0,{sensitivity:"base"})}),this.unitList=this.units.getConversionsForPath(""),this.formMaster=this.generateFormGroups(this.widgetConfig),this.formMaster.statusChanges.pipe(De(this.destroyRef)).subscribe(()=>this.saveDisabled.set(this.formMaster.invalid)),queueMicrotask(()=>this.saveDisabled.set(this.formMaster.invalid)),this.colors=this.app.configurableThemeColors}isPlainObject(e){return Object.prototype.toString.call(e)==="[object Object]"}generateFormGroups(e,t){let i=this.fb.group({});return Object.keys(e).forEach(o=>{let r=e[o];if(r!==null&&(Array.isArray(r)||this.isPlainObject(r))){if(o===n.KEY_MULTI_CHILD_CTRLS){i.addControl(o,this.fb.array([]));let s=i.get(o);r.forEach(l=>{s.push(this.generateCtrlArray(l))})}else if(o===n.KEY_DISPLAY_SCALE)i.addControl(o,this.generateFormGroups(r,o));else if(o===n.KEY_GAUGE)i.addControl(o,this.generateFormGroups(r,o));else if(o===n.KEY_AUTOPILOT)i.addControl(o,this.generateFormGroups(r,o));else if(o===n.KEY_AIS)i.addControl(o,this.generateFormGroups(r,o));else if(o===n.KEY_PATHS){let s=r;if(this.widgetConfig.multiChildCtrls!==void 0){this.isPathArray=!0,i.addControl(o,this.fb.array([]));let l=i.get(o);Object.keys(s).forEach(m=>{let h=s[m];if(h){let v=this.generatePathArray(m,h);h.isPathConfigurable===!1&&v.disable(),l.push(v)}})}else{let l=this.fb.group({});Object.keys(s).forEach(m=>{let h=s[m];if(h){let v=this.generateFormGroups(h,m);h.isPathConfigurable===!1&&v.disable(),l.addControl(m,v)}}),i.addControl(o,l)}}else Array.isArray(r)?i.addControl(o,new We(r)):i.addControl(o,this.generateFormGroups(r,o));t===n.KEY_PATHS&&i.addControl(o,this.generateFormGroups(r,o))}else if(t===n.KEY_CONVERT_UNIT_TO){let s=e[o];(s&&s.pathType=="number"||"datasetUUID"in this.widgetConfig)&&i.addControl(o,new We(r))}else switch(o){case"path":i.addControl(o,new We(r));break;case"datasetUUID":i.addControl(o,new We(r,mt.required));break;case"dataTimeout":i.addControl(o,new We(r,mt.required));break;default:i.addControl(o,new We(r));break}}),i}generatePathArray(e,t){let i=new Xi({});return Object.keys(t).forEach(o=>{i.addControl(o,this.generatePathFields(o,t[o]))}),i}generatePathFields(e,t){let i=null;switch(e){case"path":i=new We(t);break;case"source":i=new We(t,mt.required);break;case"sampleTime":i=new We(t,mt.required);break;default:i=new We(t);break}return i}generateCtrlArray(e){let t=this.fb.group(e);return t.get("ctrlLabel").addValidators(mt.required),t}addPathGroup(e){this.addPathEvent=e}updatePath(e){e.forEach(t=>{this.formMaster.get("paths").controls.forEach(o=>{o.get("pathID").value==t.pathID&&(o.controls.description.setValue(t.ctrlLabel),o.controls.pathType.setValue(t.isNumeric?"number":"boolean"),this.updatePathEvent=e)})})}deletePath(e){let t=this.formMaster.get("paths"),i=0;t.controls.forEach(r=>{r.get("pathID").value==e.pathID?t.removeAt(i):i++}),this.formMaster.get("multiChildCtrls").removeAt(e.ctrlIndex),this.delPathEvent=e.pathID,this.formMaster.updateValueAndValidity()}get datachartPathControl(){return this.formMaster.get("datachartPath")}get datachartSourceControl(){return this.formMaster.get("datachartSource")}get convertUnitToControl(){return this.formMaster.get("convertUnitTo")}get timeScaleControl(){return this.formMaster.get("timeScale")}get periodControl(){return this.formMaster.get("period")}get datasetUUIDToControl(){return this.formMaster.get("datasetUUID")}get filterSelfPathsToControl(){return this.formMaster.get("filterSelfPaths")}get dataTimeoutToControl(){return this.formMaster.get("dataTimeout")}get enableTimeoutToControl(){return this.formMaster.get("enableTimeout")}get dateTimezoneToControl(){return this.formMaster.get("dateTimezone")}get yScaleSuggestedMaxToControl(){return this.formMaster.get("yScaleSuggestedMax")}get enableMinMaxScaleLimitToControl(){return this.formMaster.get("enableMinMaxScaleLimit")}get showDatasetMinimumValueLineToControl(){return this.formMaster.get("showDatasetMinimumValueLine")}get showDatasetMaximumValueLineToControl(){return this.formMaster.get("showDatasetMaximumValueLine")}get showDatasetAverageValueLineToControl(){return this.formMaster.get("showDatasetAverageValueLine")}get showDatasetAngleAverageValueLineToControl(){return this.formMaster.get("showDatasetAngleAverageValueLine")}get startScaleAtZeroToControl(){return this.formMaster.get("startScaleAtZero")}get showLabelToControl(){return this.formMaster.get("showLabel")}get showTimeScaleToControl(){return this.formMaster.get("showTimeScale")}get showYScaleToControl(){return this.formMaster.get("showYScale")}get yScaleSuggestedMinToControl(){return this.formMaster.get("yScaleSuggestedMin")}get yScaleMinToControl(){return this.formMaster.get("yScaleMin")}get yScaleMaxToControl(){return this.formMaster.get("yScaleMax")}get datasetAverageArrayToControl(){return this.formMaster.get("datasetAverageArray")}get trackAgainstAverageToControl(){return this.formMaster.get("trackAgainstAverage")}get showDataPointsToControl(){return this.formMaster.get("showDataPoints")}get showAverageDataToControl(){return this.formMaster.get("showAverageData")}get displayNameToControl(){return this.formMaster.get("displayName")}get numDecimalToControl(){return this.formMaster.get("numDecimal")}get verticalChartToControl(){return this.formMaster.get("verticalChart")}get inverseYAxisToControl(){return this.formMaster.get("inverseYAxis")}get colorToControl(){return this.formMaster.get("color")}get dateFormatToControl(){return this.formMaster.get("dateFormat")}get multiChildCtrlsToControl(){return this.formMaster.get("multiChildCtrls")}submitConfig(){let e=this.formMaster.getRawValue();this.normalizeElectricalTrackedDevices(e),this.dialogRef.close(e)}normalizeElectricalTrackedDevices(e){[e.charger,e.inverter,e.alternator,e.ac,e.solarCharger,e.bms].forEach(i=>{if(!i)return;let o=Array.isArray(i.trackedDevices)?i.trackedDevices:[],r=new Map;o.forEach(s=>{if(!s||typeof s!="object")return;let l=s,m=typeof l.id=="string"?l.id.trim():"",h=typeof l.source=="string"?l.source.trim():"default";if(!m||!h)return;let v=typeof l.key=="string"&&l.key.trim().length>0?l.key.trim():`${m}||${h}`;r.set(v,{id:m,source:h,key:v})}),i.trackedDevices=[...r.values()].sort((s,l)=>s.key.localeCompare(l.key))})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["modal-widget-config"]],decls:27,vars:16,consts:[[3,"ngSubmit","formGroup"],["mat-dialog-title",""],[1,"widget-config-dialog-content"],[1,"tab-group-content"],["label","Display"],[1,"tab-content",3,"displayName","datasetUUID","convertUnitTo","showDataPoints","showAverageData","trackAgainstAverage","datasetAverageArray","showDatasetMinimumValueLine","showDatasetMaximumValueLine","showDatasetAverageValueLine","showDatasetAngleAverageValueLine","startScaleAtZero","showLabel","showTimeScale","showYScale","yScaleSuggestedMin","yScaleSuggestedMax","enableMinMaxScaleLimit","yScaleMin","yScaleMax","numDecimal","verticalChart","inverseYAxis","color"],["formGroupName","autopilot",1,"tab-content"],[1,"display-content","tab-content"],["label","Filter"],["label","Controls"],["label","Paths"],["label","Settings","formGroupName","gauge"],["label","Put Request"],["label","Dataset"],["label","BMS"],["label","Solar Chargers"],["label","Chargers"],["label","Inverters"],["label","Alternators"],["label","AC"],["type","button","mat-dialog-close","","mat-flat-button",""],["mat-flat-button","","type","submit",3,"disabled"],[1,"widget-options-grid"],[1,"options-grid-span2"],["name","allowInput","formControlName","allowInput",1,"options-grid-span2"],[3,"class"],["name","showMin","formControlName","showMin"],["name","showMax","formControlName","showMax"],[3,"options-grid-span2"],[1,"fields"],["name","playBeeps","formControlName","playBeeps"],[1,"options-grid-span2",3,"dateFormat","dateTimezone"],["name","compassModeEnabled","formControlName","compassModeEnabled",1,"fields","options-grid-span2"],["name","laylineEnable","formControlName","laylineEnable",1,"fields"],["name","windSectorEnable","formControlName","windSectorEnable"],["name","awsEnable","formControlName","awsEnable"],["name","twsEnable","formControlName","twsEnable"],["name","courseOverGroundEnable","formControlName","courseOverGroundEnable"],["name","twaEnable","formControlName","twaEnable"],["name","waypointEnable","formControlName","waypointEnable"],["name","driftEnable","formControlName","driftEnable"],["name","ignoreZones","formControlName","ignoreZones"],["formGroupName","gauge",1,"options-grid-span2"],["name","showMiniChart","formControlName","showMiniChart",1,"options-grid-span2"],["name","inverseYAxis","formControlName","inverseYAxis"],["name","verticalChart","formControlName","verticalChart"],["name","noBgColor","formControlName","noBgColor"],["formGroupName","ais"],["type","url","matInput","","placeholder","Enter URL to page/resource","name","widgetUrl","formControlName","widgetUrl"],[1,"flex-container","options-grid-span2"],[1,"panel-group"],[1,"full-width"],["matInput","","placeholder","Enter a label to display","name","displayName","formControlName","displayName"],["name","showLabel","formControlName","showLabel",1,"full-width"],["formGroupName","displayScale","appearance","outline"],["matNativeControl","","type","number","name","lower","formControlName","lower","placeholder","Enter number..."],["matInput","","type","number","name","upper","formControlName","upper","placeholder","Enter number..."],["type","number","min","1","max","5","matInput","","placeholder","Enter or select number...","name","numInt","formControlName","numInt","required",""],["type","number","min","0","max","5","matInput","","placeholder","Enter or select number...","name","numDecimal","formControlName","numDecimal","required",""],["type","number","min","0","max","99","matInput","","placeholder","Enter or select number...","name","nextDashboard","formControlName","nextDashboard"],["placeholder","Select unit","formControlName","convertUnitTo","required",""],[3,"label"],[3,"value"],["type","number","min","10","max","90","matInput","","placeholder","Select angle...","name","laylineAngle","formControlName","laylineAngle"],["type","number","min","1","max","90","matInput","","placeholder","Select or enter duration...","name","windSectorWindowSeconds","formControlName","windSectorWindowSeconds"],["matInput","","type","number","name","minValue","formControlName","minValue","placeholder","Enter or select number..."],["matInput","","type","number","name","maxValue","formControlName","maxValue","placeholder","Enter or select number..."],["formGroupName","gauge"],["name","sideLabel","formControlName","sideLabel"],["name","invertAngle","formControlName","invertAngle"],["type","number","min","0","max","25","matInput","","placeholder","Enter or select number...","name","highlightsWidth","formControlName","highlightsWidth","required",""],["name","enableNeedle","formControlName","enableNeedle"],["name","enableProgressbar","formControlName","enableProgressbar"],["name","enableTicks","formControlName","enableTicks"],["placeholder","Select Gauge Type...","formControlName","subType","name","subType"],["value","marineCompass"],["value","baseplateCompass"],["name","showValueBox","formControlName","showValueBox"],["name","compassUseNumbers","formControlName","compassUseNumbers"],["value","measuring"],["value","capacity"],["placeholder","Select start position...","formControlName","barStartPosition","name","barStartPosition"],["value","left"],["value","middle"],["value","right"],["type","number","min","1","max","360","matInput","","placeholder","Enter or select number...","name","scaleStart","formControlName","scaleStart","required",""],["placeholder","Select type...","formControlName","subType","name","subType"],["value","vertical"],["value","horizontal"],["placeholder","Select label format","formControlName","unitLabelFormat","name","unitLabelFormat"],["value","full"],["value","abr"],["placeholder","Select Color...","formControlName","color","name","color","required",""],["placeholder","Select span duration...","formControlName","timeScale","name","timeScale","required",""],["value","Last Minute"],["value","Last 5 Minutes"],["value","Last 30 Minutes"],[2,"grid-column","1 / -1","font-size","0.9em","color","var(--mat-sys-outline)"],["routerLink","/help",2,"color","var(--kip-blue-color)","cursor","pointer","text-decoration","underline"],["type","number","matInput","","placeholder","Enter or select number...","name","yScaleMin","formControlName","yScaleMin","required",""],["type","number","matInput","","placeholder","Enter or select number...","name","yScaleMax","formControlName","yScaleMax","required",""],["placeholder","Select Color...","formControlName","bgColor","name","bgColor","required",""],["placeholder","Select view mode...","formControlName","viewMode","name","viewMode","required",""],["value","north-up"],["value","course-up"],["placeholder","Select AIS range...","formControlName","rangeIndex","name","rangeIndex","required",""],["value","0"],["value","1"],["value","2"],["value","3"],["value","4"],["value","5"],["name","showCogVectors","formControlName","showCogVectors"],["type","number","min","1","max","120","matInput","","placeholder","Enter or select duration...","name","cogVectorsMinutes","formControlName","cogVectorsMinutes"],["name","showUnconfirmedTargets","formControlName","showUnconfirmedTargets"],["name","showLostTargets","formControlName","showLostTargets"],["name","showSelf","formControlName","showSelf"],["placeholder","Select style...","formControlName","faceColor","name","faceColor"],["value","blackMetal"],["value","metal"],["value","shinyMetal"],["value","brass"],["value","steel"],["value","chrome"],["value","gold"],["value","anthracite"],["value","tiltedGray"],["value","tiltedBlack"],["value","glossyMetal"],["placeholder","Select style...","formControlName","backgroundColor","name","backgroundColor"],["value","darkGray"],["value","satinGray"],["value","lightGray"],["value","white"],["value","black"],["value","beige"],["value","brown"],["value","red"],["value","green"],["value","blue"],["value","mud"],["value","punchedSheet"],["value","carbon"],["value","stainless"],["value","brushedMetal"],["value","brushedStainless"],["value","turned"],["name","invertPitch","formControlName","invertPitch"],["name","invertRoll","formControlName","invertRoll"],["name","noFrameVisible","formControlName","noFrameVisible"],[1,"tab-content"],["mat-tab-label",""],[3,"addPath","updatePath","delPath","multiCtrlArray","zonesOnlyPaths"],[1,"warning","material-icons"],["formGroupName","paths",3,"isArray","enableTimeout","dataTimeout","filterSelfPaths","addPathEvent","delPathEvent","updatePathEvent"],["value","linear"],["value","radial"],["formControlName","digitalMeter","name","digitalMeter"],["placeholder","Select size...","formControlName","radialSize","name","radialSize"],["value","quarter"],["value","half"],["value","three-quarter"],["formControlName","putEnable","name","putEnable"],["formControlName","putMomentary","name","putMomentary"],["formControlName","putMomentaryValue","name","putMomentaryValue"],[3,"filterSelfPaths","datachartPath","datachartSource","convertUnitTo","timeScale","period"],[1,"warning","fa","fa-exclamation-circle"],["formGroupName","bms",1,"tab-content"],["formGroupName","solarCharger",1,"tab-content"],["formGroupName","charger","setupLabel","Charger","discoveryId","electrical-chargers","discoveryPattern","self.electrical.charger*","familyRegex","self\\\\.electrical\\\\.chargers?\\\\.([^.]+)(?:\\\\.|$)","pathPrefix","electrical.charger",1,"tab-content"],["formGroupName","inverter","setupLabel","Inverter","discoveryId","electrical-inverters","discoveryPattern","self.electrical.inverter*","familyRegex","self\\\\.electrical\\\\.inverters?\\\\.([^.]+)(?:\\\\.|$)","pathPrefix","electrical.inverter",1,"tab-content"],["formGroupName","alternator","setupLabel","Alternator","discoveryId","electrical-alternators","discoveryPattern","self.electrical.alternator*","familyRegex","self\\\\.electrical\\\\.alternators?\\\\.([^.]+)(?:\\\\.|$)","pathPrefix","electrical.alternator",1,"tab-content"],["formGroupName","ac","setupLabel","AC","discoveryId","electrical-ac","discoveryPattern","self.electrical.ac*","familyRegex","self\\\\.electrical\\\\.ac\\\\.([^.]+)(?:\\\\.|$)","pathPrefix","electrical.ac.",1,"tab-content"]],template:function(t,i){t&1&&(d(0,"form",0),$("ngSubmit",function(){return i.submitConfig()}),d(1,"h6",1),c(2),u(),d(3,"mat-dialog-content",2)(4,"mat-tab-group",3)(5,"mat-tab",4),I(6,Ib,1,24,"config-display-chart-options",5)(7,Pb,1,0,"select-autopilot",6)(8,V1,44,43,"div",7),u(),I(9,L1,2,0,"mat-tab",8),I(10,F1,5,2,"mat-tab",9),I(11,G1,5,7,"mat-tab",10),I(12,H1,12,2,"mat-tab",11),I(13,$1,9,1,"mat-tab",12),I(14,K1,3,6,"mat-tab",13),I(15,X1,2,0,"mat-tab",14),I(16,Q1,5,0,"mat-tab",15),I(17,J1,2,0,"mat-tab",16),I(18,ey,2,0,"mat-tab",17),I(19,ty,2,0,"mat-tab",18),I(20,iy,2,0,"mat-tab",19),u()(),O(21,"mat-divider"),d(22,"mat-dialog-actions")(23,"button",20),c(24,"Cancel"),u(),d(25,"button",21),c(26," Save "),u()()()),t&2&&(R("formGroup",i.formMaster),f(2),Q(i.titleDialog),f(4),P((i.widgetConfig==null?null:i.widgetConfig.datachartPath)!==void 0?6:i.widgetConfig!=null&&i.widgetConfig.autopilot?7:8),f(3),P((i.widgetConfig==null?null:i.widgetConfig.ais)!==void 0?9:-1),f(),P((i.widgetConfig==null?null:i.widgetConfig.multiChildCtrls)!==void 0?10:-1),f(),P((i.widgetConfig==null?null:i.widgetConfig.paths)!==void 0?11:-1),f(),P((i.widgetConfig==null||i.widgetConfig.gauge==null?null:i.widgetConfig.gauge.type)==="steel"?12:-1),f(),P((i.widgetConfig==null?null:i.widgetConfig.putEnable)!==void 0&&(i.widgetConfig==null?null:i.widgetConfig.multiChildCtrls)===void 0?13:-1),f(),P((i.widgetConfig==null?null:i.widgetConfig.datachartPath)!==void 0?14:-1),f(),P(i.widgetConfig!=null&&i.widgetConfig.bms?15:-1),f(),P(i.widgetConfig!=null&&i.widgetConfig.solarCharger?16:-1),f(),P(i.widgetConfig!=null&&i.widgetConfig.charger?17:-1),f(),P(i.widgetConfig!=null&&i.widgetConfig.inverter?18:-1),f(),P(i.widgetConfig!=null&&i.widgetConfig.alternator?19:-1),f(),P(i.widgetConfig!=null&&i.widgetConfig.ac?20:-1),f(5),R("disabled",i.saveDisabled()))},dependencies:[Ot,ro,bt,Oi,ot,Mt,Pt,vn,uo,yt,rt,Jt,lo,Qt,Pi,Ri,Kn,Ni,qt,Ct,At,$t,xt,qu,zu,Uu,Hu,fi,ei,gi,jt,Rt,mo,Wi,Li,et,vt,Am,hm,fm,mm,ym,xm,Lm,Sm,Wm,Is],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%}.widget-config-dialog-content[_ngcontent-%COMP%]{height:100%}.display-content[_ngcontent-%COMP%]{display:block;height:100%;width:100%;padding-top:15px;padding-bottom:10px}.warning[_ngcontent-%COMP%]{color:var(--mat-sys-error-container)}.tab-group-content[_ngcontent-%COMP%]{overflow:hidden;width:100%}.flex-container[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;margin:15px 0;gap:15px;align-items:stretch}.panel-group[_ngcontent-%COMP%]{min-width:250px;flex-grow:1}"]})}return n})();var ry=["button"],sy=["*"];function ly(n,a){if(n&1&&(d(0,"div",2),O(1,"mat-pseudo-checkbox",6),u()),n&2){let e=T();f(),R("disabled",e.disabled)}}var Gm=new _n("MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS",{providedIn:"root",factory:()=>({hideSingleSelectionIndicator:!1,hideMultipleSelectionIndicator:!1,disabledInteractive:!1})}),zm=new _n("MatButtonToggleGroup"),dy={provide:ms,useExisting:jr(()=>ur),multi:!0},Ps=class{source;value;constructor(a,e){this.source=a,this.value=e}},ur=(()=>{class n{_changeDetector=A(ki);_dir=A(ls,{optional:!0});_multiple=!1;_disabled=!1;_disabledInteractive=!1;_selectionModel;_rawValue;_controlValueAccessorChangeFn=()=>{};_onTouched=()=>{};_buttonToggles;appearance;get name(){return this._name}set name(e){this._name=e,this._markButtonsForCheck()}_name=A(Ta).getId("mat-button-toggle-group-");vertical=!1;get value(){let e=this._selectionModel?this._selectionModel.selected:[];return this.multiple?e.map(t=>t.value):e[0]?e[0].value:void 0}set value(e){this._setSelectionByValue(e),this.valueChange.emit(this.value)}valueChange=new hi;get selected(){let e=this._selectionModel?this._selectionModel.selected:[];return this.multiple?e:e[0]||null}get multiple(){return this._multiple}set multiple(e){this._multiple=e,this._markButtonsForCheck()}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this._markButtonsForCheck()}get disabledInteractive(){return this._disabledInteractive}set disabledInteractive(e){this._disabledInteractive=e,this._markButtonsForCheck()}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}change=new hi;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(e){this._hideSingleSelectionIndicator=e,this._markButtonsForCheck()}_hideSingleSelectionIndicator;get hideMultipleSelectionIndicator(){return this._hideMultipleSelectionIndicator}set hideMultipleSelectionIndicator(e){this._hideMultipleSelectionIndicator=e,this._markButtonsForCheck()}_hideMultipleSelectionIndicator;constructor(){let e=A(Gm,{optional:!0});this.appearance=e&&e.appearance?e.appearance:"standard",this._hideSingleSelectionIndicator=e?.hideSingleSelectionIndicator??!1,this._hideMultipleSelectionIndicator=e?.hideMultipleSelectionIndicator??!1}ngOnInit(){this._selectionModel=new Lu(this.multiple,void 0,!1)}ngAfterContentInit(){this._selectionModel.select(...this._buttonToggles.filter(e=>e.checked)),this.multiple||this._initializeTabIndex()}writeValue(e){this.value=e,this._changeDetector.markForCheck()}registerOnChange(e){this._controlValueAccessorChangeFn=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this.disabled=e}_keydown(e){if(this.multiple||this.disabled||jn(e))return;let i=e.target.id,o=this._buttonToggles.toArray().findIndex(s=>s.buttonId===i),r=null;switch(e.keyCode){case 32:case 13:r=this._buttonToggles.get(o)||null;break;case 38:r=this._getNextButton(o,-1);break;case 37:r=this._getNextButton(o,this.dir==="ltr"?-1:1);break;case 40:r=this._getNextButton(o,1);break;case 39:r=this._getNextButton(o,this.dir==="ltr"?1:-1);break;default:return}r&&(e.preventDefault(),r._onButtonClick(),r.focus())}_emitChangeEvent(e){let t=new Ps(e,this.value);this._rawValue=t.value,this._controlValueAccessorChangeFn(t.value),this.change.emit(t)}_syncButtonToggle(e,t,i=!1,o=!1){!this.multiple&&this.selected&&!e.checked&&(this.selected.checked=!1),this._selectionModel?t?this._selectionModel.select(e):this._selectionModel.deselect(e):o=!0,o?Promise.resolve().then(()=>this._updateModelValue(e,i)):this._updateModelValue(e,i)}_isSelected(e){return this._selectionModel&&this._selectionModel.isSelected(e)}_isPrechecked(e){return typeof this._rawValue>"u"?!1:this.multiple&&Array.isArray(this._rawValue)?this._rawValue.some(t=>e.value!=null&&t===e.value):e.value===this._rawValue}_initializeTabIndex(){if(this._buttonToggles.forEach(e=>{e.tabIndex=-1}),this.selected)this.selected.tabIndex=0;else for(let e=0;e<this._buttonToggles.length;e++){let t=this._buttonToggles.get(e);if(!t.disabled){t.tabIndex=0;break}}}_getNextButton(e,t){let i=this._buttonToggles;for(let o=1;o<=i.length;o++){let r=(e+t*o+i.length)%i.length,s=i.get(r);if(s&&!s.disabled)return s}return null}_setSelectionByValue(e){if(this._rawValue=e,!this._buttonToggles)return;let t=this._buttonToggles.toArray();if(this.multiple&&e?(Array.isArray(e),this._clearSelection(),e.forEach(i=>this._selectValue(i,t))):(this._clearSelection(),this._selectValue(e,t)),!this.multiple&&t.every(i=>i.tabIndex===-1)){for(let i of t)if(!i.disabled){i.tabIndex=0;break}}}_clearSelection(){this._selectionModel.clear(),this._buttonToggles.forEach(e=>{e.checked=!1,this.multiple||(e.tabIndex=-1)})}_selectValue(e,t){for(let i of t)if(i.value===e){i.checked=!0,this._selectionModel.select(i),this.multiple||(i.tabIndex=0);break}}_updateModelValue(e,t){t&&this._emitChangeEvent(e),this.valueChange.emit(this.value)}_markButtonsForCheck(){this._buttonToggles?.forEach(e=>e._markForCheck())}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["mat-button-toggle-group"]],contentQueries:function(t,i,o){if(t&1&&is(o,To,5),t&2){let r;Mi(r=Ti())&&(i._buttonToggles=r)}},hostAttrs:[1,"mat-button-toggle-group"],hostVars:6,hostBindings:function(t,i){t&1&&$("keydown",function(r){return i._keydown(r)}),t&2&&(ie("role",i.multiple?"group":"radiogroup")("aria-disabled",i.disabled),dt("mat-button-toggle-vertical",i.vertical)("mat-button-toggle-group-appearance-standard",i.appearance==="standard"))},inputs:{appearance:"appearance",name:"name",vertical:[2,"vertical","vertical",It],value:"value",multiple:[2,"multiple","multiple",It],disabled:[2,"disabled","disabled",It],disabledInteractive:[2,"disabledInteractive","disabledInteractive",It],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",It],hideMultipleSelectionIndicator:[2,"hideMultipleSelectionIndicator","hideMultipleSelectionIndicator",It]},outputs:{valueChange:"valueChange",change:"change"},exportAs:["matButtonToggleGroup"],features:[er([dy,{provide:zm,useExisting:n}])]})}return n})(),To=(()=>{class n{_changeDetectorRef=A(ki);_elementRef=A(nt);_focusMonitor=A(Yc);_idGenerator=A(Ta);_animationDisabled=pn();_checked=!1;ariaLabel;ariaLabelledby=null;_buttonElement;buttonToggleGroup;get buttonId(){return`${this.id}-button`}id;name;value;get tabIndex(){return this._tabIndex()}set tabIndex(e){this._tabIndex.set(e)}_tabIndex;disableRipple=!1;get appearance(){return this.buttonToggleGroup?this.buttonToggleGroup.appearance:this._appearance}set appearance(e){this._appearance=e}_appearance;get checked(){return this.buttonToggleGroup?this.buttonToggleGroup._isSelected(this):this._checked}set checked(e){e!==this._checked&&(this._checked=e,this.buttonToggleGroup&&this.buttonToggleGroup._syncButtonToggle(this,this._checked),this._changeDetectorRef.markForCheck())}get disabled(){return this._disabled||this.buttonToggleGroup&&this.buttonToggleGroup.disabled}set disabled(e){this._disabled=e}_disabled=!1;get disabledInteractive(){return this._disabledInteractive||this.buttonToggleGroup!==null&&this.buttonToggleGroup.disabledInteractive}set disabledInteractive(e){this._disabledInteractive=e}_disabledInteractive;change=new hi;constructor(){A(os).load(iu);let e=A(zm,{optional:!0}),t=A(new Fc("tabindex"),{optional:!0})||"",i=A(Gm,{optional:!0});this._tabIndex=w(parseInt(t)||0),this.buttonToggleGroup=e,this._appearance=i&&i.appearance?i.appearance:"standard",this._disabledInteractive=i?.disabledInteractive??!1}ngOnInit(){let e=this.buttonToggleGroup;this.id=this.id||this._idGenerator.getId("mat-button-toggle-"),e&&(e._isPrechecked(this)?this.checked=!0:e._isSelected(this)!==this._checked&&e._syncButtonToggle(this,this._checked))}ngAfterViewInit(){this._animationDisabled||this._elementRef.nativeElement.classList.add("mat-button-toggle-animations-enabled"),this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){let e=this.buttonToggleGroup;this._focusMonitor.stopMonitoring(this._elementRef),e&&e._isSelected(this)&&e._syncButtonToggle(this,!1,!1,!0)}focus(e){this._buttonElement.nativeElement.focus(e)}_onButtonClick(){if(this.disabled)return;let e=this.isSingleSelector()?!0:!this._checked;if(e!==this._checked&&(this._checked=e,this.buttonToggleGroup&&(this.buttonToggleGroup._syncButtonToggle(this,this._checked,!0),this.buttonToggleGroup._onTouched())),this.isSingleSelector()){let t=this.buttonToggleGroup._buttonToggles.find(i=>i.tabIndex===0);t&&(t.tabIndex=-1),this.tabIndex=0}this.change.emit(new Ps(this,this.value))}_markForCheck(){this._changeDetectorRef.markForCheck()}_getButtonName(){return this.isSingleSelector()?this.buttonToggleGroup.name:this.name||null}isSingleSelector(){return this.buttonToggleGroup&&!this.buttonToggleGroup.multiple}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["mat-button-toggle"]],viewQuery:function(t,i){if(t&1&&$n(ry,5),t&2){let o;Mi(o=Ti())&&(i._buttonElement=o.first)}},hostAttrs:["role","presentation",1,"mat-button-toggle"],hostVars:14,hostBindings:function(t,i){t&1&&$("focus",function(){return i.focus()}),t&2&&(ie("aria-label",null)("aria-labelledby",null)("id",i.id)("name",null),dt("mat-button-toggle-standalone",!i.buttonToggleGroup)("mat-button-toggle-checked",i.checked)("mat-button-toggle-disabled",i.disabled)("mat-button-toggle-disabled-interactive",i.disabledInteractive)("mat-button-toggle-appearance-standard",i.appearance==="standard"))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],id:"id",name:"name",value:"value",tabIndex:"tabIndex",disableRipple:[2,"disableRipple","disableRipple",It],appearance:"appearance",checked:[2,"checked","checked",It],disabled:[2,"disabled","disabled",It],disabledInteractive:[2,"disabledInteractive","disabledInteractive",It]},outputs:{change:"change"},exportAs:["matButtonToggle"],ngContentSelectors:sy,decls:7,vars:13,consts:[["button",""],["type","button",1,"mat-button-toggle-button","mat-focus-indicator",3,"click","id","disabled"],[1,"mat-button-toggle-checkbox-wrapper"],[1,"mat-button-toggle-label-content"],[1,"mat-button-toggle-focus-overlay"],["matRipple","",1,"mat-button-toggle-ripple",3,"matRippleTrigger","matRippleDisabled"],["state","checked","aria-hidden","true","appearance","minimal",3,"disabled"]],template:function(t,i){if(t&1&&(es(),d(0,"button",1,0),$("click",function(){return i._onButtonClick()}),I(2,ly,2,1,"div",2),d(3,"span",3),ts(4),u()(),O(5,"span",4)(6,"span",5)),t&2){let o=Lt(1);R("id",i.buttonId)("disabled",i.disabled&&!i.disabledInteractive||null),ie("role",i.isSingleSelector()?"radio":"button")("tabindex",i.disabled&&!i.disabledInteractive?-1:i.tabIndex)("aria-pressed",i.isSingleSelector()?null:i.checked)("aria-checked",i.isSingleSelector()?i.checked:null)("name",i._getButtonName())("aria-label",i.ariaLabel)("aria-labelledby",i.ariaLabelledby)("aria-disabled",i.disabled&&i.disabledInteractive?"true":null),f(2),P(i.buttonToggleGroup&&(!i.buttonToggleGroup.multiple&&!i.buttonToggleGroup.hideSingleSelectionIndicator||i.buttonToggleGroup.multiple&&!i.buttonToggleGroup.hideMultipleSelectionIndicator)?2:-1),f(4),R("matRippleTrigger",o)("matRippleDisabled",i.disableRipple||i.disabled)}},dependencies:[tu,Iu],styles:[`.mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);border-radius:var(--mat-button-toggle-legacy-shape);transform:translateZ(0)}.mat-button-toggle-standalone:not([class*=mat-elevation-z]),.mat-button-toggle-group:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}@media(forced-colors: active){.mat-button-toggle-standalone,.mat-button-toggle-group{outline:solid 1px}}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard .mat-pseudo-checkbox,.mat-button-toggle-group-appearance-standard .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard:not([class*=mat-elevation-z]),.mat-button-toggle-group-appearance-standard:not([class*=mat-elevation-z]){box-shadow:none}@media(forced-colors: active){.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{outline:0}}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative;color:var(--mat-button-toggle-legacy-text-color);font-family:var(--mat-button-toggle-legacy-label-text-font);font-size:var(--mat-button-toggle-legacy-label-text-size);line-height:var(--mat-button-toggle-legacy-label-text-line-height);font-weight:var(--mat-button-toggle-legacy-label-text-weight);letter-spacing:var(--mat-button-toggle-legacy-label-text-tracking);--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-legacy-selected-state-text-color)}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-legacy-focus-state-layer-opacity)}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle-checkbox-wrapper{display:inline-block;justify-content:flex-start;align-items:center;width:0;height:18px;line-height:18px;overflow:hidden;box-sizing:border-box;position:absolute;top:50%;left:16px;transform:translate3d(0, -50%, 0)}[dir=rtl] .mat-button-toggle-checkbox-wrapper{left:auto;right:16px}.mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:12px}[dir=rtl] .mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:auto;right:12px}.mat-button-toggle-checked .mat-button-toggle-checkbox-wrapper{width:18px}.mat-button-toggle-animations-enabled .mat-button-toggle-checkbox-wrapper{transition:width 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-checkbox-wrapper{transition:none}.mat-button-toggle-checked{color:var(--mat-button-toggle-legacy-selected-state-text-color);background-color:var(--mat-button-toggle-legacy-selected-state-background-color)}.mat-button-toggle-disabled{pointer-events:none;color:var(--mat-button-toggle-legacy-disabled-state-text-color);background-color:var(--mat-button-toggle-legacy-disabled-state-background-color);--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-legacy-disabled-state-text-color)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:var(--mat-button-toggle-legacy-disabled-selected-state-background-color)}.mat-button-toggle-disabled-interactive{pointer-events:auto}.mat-button-toggle-appearance-standard{color:var(--mat-button-toggle-text-color, var(--mat-sys-on-surface));background-color:var(--mat-button-toggle-background-color, transparent);font-family:var(--mat-button-toggle-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-toggle-label-text-size, var(--mat-sys-label-large-size));line-height:var(--mat-button-toggle-label-text-line-height, var(--mat-sys-label-large-line-height));font-weight:var(--mat-button-toggle-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-button-toggle-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:none;border-top:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{color:var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-toggle-selected-state-background-color, var(--mat-sys-secondary-container))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{color:var(--mat-button-toggle-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-state-background-color, transparent)}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled.mat-button-toggle-checked{color:var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-selected-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:var(--mat-button-toggle-state-layer-color, var(--mat-sys-on-surface))}.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-button-toggle-appearance-standard.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}@media(hover: none){.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;user-select:none;display:inline-block;padding:0 16px;line-height:var(--mat-button-toggle-legacy-height);position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px;line-height:var(--mat-button-toggle-height, 40px)}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;pointer-events:none;opacity:0;background-color:var(--mat-button-toggle-legacy-state-layer-color)}@media(forced-colors: active){.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 500px;opacity:.5;height:0}.mat-button-toggle-checked:hover .mat-button-toggle-focus-overlay{opacity:.6}.mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-animations-enabled .mat-button-toggle-button{transition:padding 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-button{transition:none}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}.mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:30px}[dir=rtl] .mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:0;padding-right:30px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{--mat-focus-indicator-border-radius: var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}
44
+ `],encapsulation:2,changeDetection:0})}return n})(),Rs=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=cn({type:n});static \u0275inj=ln({imports:[nu,To,Yn]})}return n})();var cy="3.5.1";function rd(n,a,e){return Math.min(Math.max(n,a),e)}function kt(n,a){let e=n.options.realtime,t=n.chart.options.plugins?.streaming;return Rn(e?.[a],t?.[a])}function sd(n,{x:a,y:e},{xAxisID:t,yAxisID:i}){let o={};for(let r=0,s=a.length;r<s;++r)o[a[r]]={axisId:t};for(let r=0,s=e.length;r<s;++r)o[e[r]]={axisId:i};return o}var uy=typeof window>"u"?ka:window.cancelAnimationFrame;function Hm(n){let a=n.frameRequestID;a&&(uy.call(window,a),delete n.frameRequestID)}function Ym(n){let a=n.refreshTimerID;a&&(clearInterval(a),delete n.refreshTimerID,delete n.refreshInterval)}function Km(n,a,e){n.refreshTimerID||(n.refreshTimerID=setInterval(()=>{if(typeof document<"u"&&document.hidden)return;let t=bn(a,[],n);n.refreshInterval===t||isNaN(t)||(Ym(n),Km(n,a,t))},e||0),n.refreshInterval=e||0)}function en(n,a,e){return a=typeof a=="number"?a:n.parse(a),Da(a)?{value:n.getPixelForValue(a),transitionable:!0}:{value:e,transitionable:!1}}function my(){let n=bo.getElement("boxAnnotation"),a=bo.getElement("lineAnnotation"),e=bo.getElement("pointAnnotation");if(!n||!a||!e)return;let t=n.prototype.resolveElementProperties,i=a.prototype.resolveElementProperties,o=e.prototype.resolveElementProperties;n.prototype.resolveElementProperties=function(r,s){return(function(l,m,h){let{scales:v,chartArea:y}=m,{xScaleID:C,yScaleID:S,xMin:_,xMax:F,yMin:E,yMax:N}=h,U=v[C],j=v[S],{top:B,left:re,bottom:pe,right:te}=y,se=l.$streaming={};if(U){let de=en(U,_,re),ce=en(U,F,te),ue=de.value>ce.value;de.transitionable&&(se[ue?"x2":"x"]={axisId:C}),ce.transitionable&&(se[ue?"x":"x2"]={axisId:C}),de.transitionable!==ce.transitionable&&(se.width={axisId:C,reverse:de.transitionable})}if(j){let de=en(j,E,B),ce=en(j,N,pe),ue=de.value>ce.value;de.transitionable&&(se[ue?"y2":"y"]={axisId:S}),ce.transitionable&&(se[ue?"y":"y2"]={axisId:S}),de.transitionable!==ce.transitionable&&(se.height={axisId:S,reverse:de.transitionable})}})(this,r,s),t.call(this,r,s)},a.prototype.resolveElementProperties=function(r,s){let l=r.chartArea;r.chartArea=(function(h,v,y){let{scales:C,chartArea:S}=v,{scaleID:_,value:F}=y,E=C[_],{top:N,left:U,bottom:j,right:B}=S,re=h.$streaming={};if(E){let pt=E.isHorizontal();return en(E,F,0).transitionable&&(re[pt?"x":"y"]={axisId:_},re[pt?"x2":"y2"]={axisId:_}),pt?{top:N,bottom:j}:{left:U,right:B}}let{xScaleID:pe,yScaleID:te,xMin:se,xMax:de,yMin:ce,yMax:ue}=y,me=C[pe],Se=C[te],qe={};if(me){let pt=en(me,se,U),tt=en(me,de,B);pt.transitionable?re.x={axisId:pe}:qe.left=U,tt.transitionable?re.x2={axisId:pe}:qe.right=B}if(Se){let pt=en(Se,ce,N),tt=en(Se,ue,j);pt.transitionable?re.y={axisId:te}:qe.top=N,tt.transitionable?re.y2={axisId:te}:qe.bottom=j}return qe})(this,r,s);let m=i.call(this,r,s);return r.chartArea=l,m},e.prototype.resolveElementProperties=function(r,s){return(function(l,m,h){let v=m.scales,{xScaleID:y,yScaleID:C,xValue:S,yValue:_}=h,F=v[y],E=v[C],N=l.$streaming={};F&&en(F,S,0).transitionable&&(N.x={axisId:y}),E&&en(E,_,0).transitionable&&(N.y={axisId:C})})(this,r,s),o.call(this,r,s)}}var hy={x:["x","caretX"],y:["y","caretY"]};function py(...n){let a=this,e=a.getActiveElements()[0];if(e){let t=a.chart.getDatasetMeta(e.datasetIndex);a.$streaming=sd(0,hy,t)}else a.$streaming={};a.constructor.prototype.update.call(a,...n)}var ld=new WeakMap;function dd(n){let{originalScaleOptions:a}=(function(t){let i=ld.get(t);return i||(i={originalScaleOptions:{}},ld.set(t,i)),i})(n),e=n.scales;return yn(e,t=>{let i=t.id;a[i]||(a[i]={duration:kt(t,"duration"),delay:kt(t,"delay")})}),yn(a,(t,i)=>{e&&e[i]||delete a[i]}),a}function gy(n,a,e,t){let{chart:i}=n,o=n.id,{minDuration:r=0,maxDuration:s=1/0,minDelay:l=-1/0,maxDelay:m=1/0}=t?.[o]||{},h=n.options.realtime,v=kt(n,"duration"),y=kt(n,"delay"),C=rd(v*(2-a),r,s),S,_;return dd(i),S=n.isHorizontal()?(n.right-e.x)/(n.right-n.left):(n.bottom-e.y)/(n.bottom-n.top),_=y+S*(v-C),h.duration=C,h.delay=rd(_,l,m),C!==n.max-n.min}function fy(n,a,e){let{chart:t}=n,i=n.id,{minDelay:o=-1/0,maxDelay:r=1/0}=e?.[i]||{},s=kt(n,"delay")+((n.getValueForPixel(a)||0)-(n.getValueForPixel(0)||0));return dd(t),n.options.realtime.delay=rd(s,o,r),!0}function vy(n,a){let e=a.$streaming;if(e.zoomPlugin!==n){let t=e.resetZoom=a.resetZoom;(function(i){i.zoomFunctions.realtime=gy,i.panFunctions.realtime=fy})(n),a.resetZoom=i=>{(function(o){let r=dd(o);yn(o.scales,s=>{let l=s.options.realtime;if(l){let m=r[s.id];m?(l.duration=m.duration,l.delay=m.delay):(delete l.duration,delete l.delay)}})})(a),t(i)},e.zoomPlugin=n}}function by(n){let a=n.$streaming;a.zoomPlugin&&(n.resetZoom=a.resetZoom,(function(e){ld.delete(e)})(n),delete a.resetZoom,delete a.zoomPlugin)}var mr={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},Na=Object.keys(mr);function qm(n,a,e){if(e){if(e.length){let{lo:t,hi:i}=ql(e,a);n[e[t]>=a?e[t]:e[i]]=!0}}else n[a]=!0}var $m=["pointBackgroundColor","pointBorderColor","pointBorderWidth","pointRadius","pointRotation","pointStyle","pointHitRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointHoverRadius","backgroundColor","borderColor","borderSkipped","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","radius","rotation"];function Ns(n,a,e){let t=n.$streaming;if(!t)return;let i=n.$animations||{},o=e;for(let r in t){let s=t[r];if(s.axisId===a){let l=s.reverse?-o:o,m=i[r];Da(n[r])&&(n[r]-=l),m&&(m._from-=l,m._to-=l)}}}var Nn=class extends An{constructor(a){super(a),this.$realtime={}}init(a,e){let t=this;super.init.call(t,a),(function(i){if(typeof console<"u"&&console.warn){let o=kt(i,"duration"),r=kt(i,"delay"),s=kt(i,"frameRate"),l=kt(i,"refresh");(typeof o!="number"||o<=0)&&console.warn("Chart streaming: duration should be a positive number"),typeof r!="number"&&console.warn("Chart streaming: delay should be a number"),(typeof s!="number"||s<=0)&&console.warn("Chart streaming: frameRate should be a positive number"),(typeof l!="number"||l<=0)&&console.warn("Chart streaming: refresh should be a positive number")}})(t),Km(t.$realtime,()=>{let i=t.chart;try{let o=kt(t,"onRefresh");return typeof o=="function"&&bn(o,[i],t),(function(r){let{chart:s,id:l,max:m}=r,h=kt(r,"duration"),v=kt(r,"delay"),y=kt(r,"ttl"),C=kt(r,"pause"),S=Date.now()-(isNaN(y)?h+v:y),_,F,E,N;yn(s.data.datasets,(U,j)=>{let B=s.getDatasetMeta(j),re=l===B.xAxisID?"x":l===B.yAxisID&&"y";if(re){let pe=B.controller,te=U.data,se=te.length;if(C){for(_=0;_<se;++_){let de=pe.getParsed&&typeof pe.getParsed=="function"?pe.getParsed(_):Array.isArray(te[_])?{x:te[_][0],y:te[_][1]}:te[_];if(de&&!(de[re]<m))break}F=_+2}else F=0;for(_=F;_<se;++_){let de=pe.getParsed&&typeof pe.getParsed=="function"?pe.getParsed(_):Array.isArray(te[_])?{x:te[_][0],y:te[_][1]}:te[_];if(!(de&&de[re]<=S))break}if(E=_-F,isNaN(y)&&(E=Math.max(E-2,0)),E>0){te.splice(F,E);for(let ue=0,me=$m.length;ue<me;++ue){let Se=$m[ue];Zi(U[Se])&&U[Se].splice(F,E)}let de=U.datalabels;if(de)for(let ue in de)Zi(de[ue])&&de[ue].splice(F,E);typeof te[0]!="object"&&(N={start:F,count:E});let ce=s._active;if(ce&&ce.length>0)for(let ue=ce.length-1;ue>=0;ue--){let me=ce[ue];me.datasetIndex===j&&(me.index>=F+E?me.index-=E:me.index>=F&&ce.splice(ue,1))}}}}),N&&s.data.labels?.splice(N.start,N.count)})(t),i.update("quiet"),kt(t,"refresh")}catch(o){return typeof console<"u"&&console.error&&console.error("Error in streaming refresh:",o),1e3}})}update(a,e,t){let i=this,{$realtime:o,options:r}=i,{bounds:s,offset:l,ticks:m}=r,{autoSkip:h,source:v,major:y}=m,C=y.enabled;kt(i,"pause")?Hm(o):(o.frameRequestID||(o.head=Date.now()),(function(S,_){if(!S.frameRequestID){let F=()=>{if(typeof document<"u"&&document.hidden)return void(S.frameRequestID=ar.call(window,F));let E=S.nextRefresh||0,N=Date.now();if(E<=N){let U=bn(_,[],S),j=1e3/(Math.max(U,0)||30),B=(S.nextRefresh||0)+j||0;S.nextRefresh=B>N?B:N+j}S.frameRequestID=ar.call(window,F)};S.frameRequestID=ar.call(window,F)}})(o,()=>{let S=i.chart,_=S.$streaming;return(function(F){let{chart:E,id:N,$realtime:U}=F,j=kt(F,"duration"),B=kt(F,"delay"),re=F.isHorizontal(),pe=re?F.width:F.height,te=Date.now(),se=E.tooltip,de=(function(Se){let qe=Se.$streaming?.annotationPlugin;return qe?qe.getAnnotations(Se):[]})(E),ce=pe*(te-U.head)/j;re===!!F.options.reverse&&(ce=-ce);let ue=E.data.datasets.length;for(let Se=0;Se<ue;++Se){let qe=E.getDatasetMeta(Se),{data:pt=[],dataset:tt}=qe,Bt=pt.length;for(let ri=0;ri<Bt;++ri)Ns(pt[ri],N,ce);tt&&(Ns(tt,N,ce),delete tt._path)}let me=de.length;for(let Se=0;Se<me;++Se)Ns(de[Se],N,ce);se&&Ns(se,N,ce),F.max=te-B,F.min=F.max-j,U.head=te})(i),_&&bn(_.render,[S]),kt(i,"frameRate")})),r.bounds=void 0,r.offset=!1,m.autoSkip=!1,m.source=v==="auto"?"":v,y.enabled=!0,super.update.call(i,a,e,t),r.bounds=s,r.offset=l,m.autoSkip=h,m.source=v,y.enabled=C}buildTicks(){let a=this,e=kt(a,"duration"),t=kt(a,"delay"),i=a.$realtime.head-t,o=i-e,r=[1e15,i],s=[-1e15,o];Object.defineProperty(a,"min",{get:()=>s.shift(),set:ka,configurable:!0}),Object.defineProperty(a,"max",{get:()=>r.shift(),set:ka,configurable:!0});let l=super.buildTicks.call(a);return delete a.min,delete a.max,a.min=o,a.max=i,l}calculateLabelRotation(){let a=this.options.ticks,e=a.maxRotation;a.maxRotation=a.minRotation||0,super.calculateLabelRotation.call(this),a.maxRotation=e}fit(){let a=this,e=a.options;super.fit.call(a),e.ticks.display&&e.display&&a.isHorizontal()&&(a.paddingLeft=3,a.paddingRight=3,a._handleMargins())}draw(a){let e=this,{chart:t,ctx:i}=e,o=e.isHorizontal()?{left:a.left,top:0,right:a.right,bottom:t.height}:{left:0,top:a.top,right:t.width,bottom:a.bottom};e._gridLineItems=null,e._labelItems=null,go(i,o),super.draw.call(e,a),fo(i)}destroy(){let a=this.$realtime;Hm(a),Ym(a)}_generate(){let a=this,e=a._adapter,t=kt(a,"duration"),i=kt(a,"delay"),o=kt(a,"refresh"),r=a.$realtime.head-i,s=r-t,l=a._getLabelCapacity(s),{time:m,ticks:h}=a.options,v=m.unit||(function(pe,te,se,de){let ce=se-te,ue=Na.length;for(let me=Na.indexOf(pe);me<ue-1;++me){let Se=Na[me],qe=mr[Se];if(!qe)continue;let{common:pt,size:tt,steps:Bt}=qe,ri=Bt?Bt[Bt.length-1]:Number.MAX_SAFE_INTEGER;if(pt&&Math.ceil(ce/(ri*tt))<=de)return Se}return Na[ue-1]})(m.minUnit,s,r,l),y=(function(pe){for(let te=Na.indexOf(pe)+1,se=Na.length;te<se;++te){let de=Na[te];if(mr[de]?.common)return de}})(v),C=m.stepSize||(function(pe,te,se,de){let ce=te-pe,ue=mr[se];if(!ue)return 1;let{size:me,steps:Se}=ue,qe=1;if(!Se)return Math.ceil(ce/(de*me));for(let pt=0,tt=Se.length;pt<tt&&(qe=Se[pt],!(Math.ceil(ce/(me*qe))<=de));++pt);return qe||1})(s,r,v,l),S=v==="week"&&m.isoWeekday,_=h.major.enabled,F=po(S)||S===!0,E=mr[v],N={},U,j,B=s;if(F&&(B=+e.startOf(B,"isoWeek",S)),B=+e.startOf(B,F?"day":v),e.diff(r,s,v)>1e5*C)throw new Error(s+" and "+r+" are too far apart with stepSize of "+C+" "+v);U=B,_&&y&&!F&&!m.round&&(U=+e.startOf(U,y),U=+e.add(U,~~((B-U)/(E.size*C))*C,v));let re=h.source==="data"&&a.getDataTimestamps();for(j=0;U<r+o;U=+e.add(U,C,v),j++)qm(N,U,re);return U!==r+o&&j!==1||qm(N,U,re),Object.keys(N).sort((pe,te)=>+pe-+te).map(pe=>+pe)}};Nn.id="realtime",Nn.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},realtime:{},ticks:{autoSkip:!1,source:"auto",major:{enabled:!0}}},or.describe("scale.realtime",{_scriptable:n=>n!=="onRefresh"});var yy=cy;or.set("transitions",{quiet:{animation:{duration:0}}});var jm={x:["x","cp1x","cp2x"],y:["y","cp1y","cp2y"]};function Ay(n){let a=this;n==="quiet"&&yn(a.data.datasets,(e,t)=>{let i=a.getDatasetMeta(t).controller;i&&(i._setStyle=function(o,r,s,l){ju.prototype._setStyle.call(this,o,r,"quiet",l)})}),Dt.prototype.update.call(a,n),n==="quiet"&&yn(a.data.datasets,(e,t)=>{let i=a.getDatasetMeta(t).controller;i&&delete i._setStyle})}function Cy(n){let a=n.$streaming;n.render(),a.lastMouseEvent&&setTimeout(()=>{let e=a.lastMouseEvent;e&&n._eventHandler(e)},0)}var xy={id:"streaming",version:yy,beforeInit(n){let a=n.$streaming=n.$streaming||{render:Cy},e=a.canvas=n.canvas,t=a.mouseEventListener=i=>{let o=Yl(i,n);a.lastMouseEvent={type:"mousemove",chart:n,native:i,x:o.x,y:o.y}};if(e.addEventListener("mousedown",t),e.addEventListener("mouseup",t),typeof document<"u"&&document.addEventListener){let i=()=>{if(!document.hidden){let o=n.scales;o&&Object.keys(o).forEach(r=>{let s=o[r];s&&s instanceof Nn&&s.$realtime&&(s.$realtime.head=Date.now())})}};document.addEventListener("visibilitychange",i),a.visibilityChangeListener=i}},afterInit(n){n.update=Ay},beforeUpdate(n){let{scales:a,elements:e}=n.options,t=n.tooltip;a&&yn(a,i=>{i?.type==="realtime"&&e&&(e.line.capBezierPoints=!1)}),t&&(t.update=py);try{let i=bo.getPlugin("annotation");i&&(function(o,r){let s=r.$streaming;if(s.annotationPlugin!==o){let l=o.afterUpdate;my(),s.annotationPlugin=o,o.afterUpdate=function(m,h,v){let y=h.mode,C=v.animation;y==="quiet"&&(v.animation=!1),l.call(this,m,h,v),y==="quiet"&&(v.animation=C)}}})(i,n)}catch(i){(function(o){delete o.$streaming.annotationPlugin})(n)}try{let i=bo.getPlugin("zoom");i&&vy(i,n)}catch(i){by(n)}},beforeDatasetUpdate(n,a){let{meta:e,mode:t}=a;if(t==="quiet"){let{controller:i,$animations:o}=e;o&&o.visible&&o.visible._active&&(i.updateElement=ka,i.updateSharedOptions=ka)}},afterDatasetUpdate(n,a){let{meta:e,mode:t}=a,{data:i=[],dataset:o,controller:r}=e;for(let s=0,l=i.length;s<l;++s)i[s].$streaming=sd(i[s],jm,e);o&&(o.$streaming=sd(0,jm,e)),t==="quiet"&&(delete r.updateElement,delete r.updateSharedOptions)},beforeDatasetDraw(n,a){let{ctx:e,chartArea:t,width:i,height:o}=n,{xAxisID:r,yAxisID:s,controller:l}=a.meta,m={left:0,top:0,right:i,bottom:o};r&&l.getScaleForId(r)instanceof Nn&&(m.left=t.left,m.right=t.right),s&&l.getScaleForId(s)instanceof Nn&&(m.top=t.top,m.bottom=t.bottom),go(e,m)},afterDatasetDraw(n){fo(n.ctx)},beforeEvent(n,a){let e=n.$streaming,t=a.event;t?.type==="mousemove"?e.lastMouseEvent=t:t?.type==="mouseout"&&delete e.lastMouseEvent},afterDestroy(n){let{scales:a,tooltip:e}=n,t=n.$streaming,{canvas:i,mouseEventListener:o,visibilityChangeListener:r}=t;delete n.update,e&&delete e.update,i.removeEventListener("mousedown",o),i.removeEventListener("mouseup",o),r&&typeof document<"u"&&document.removeEventListener&&document.removeEventListener("visibilitychange",r),yn(a,s=>{s instanceof Nn&&s.destroy()})},defaults:{duration:1e4,delay:0,frameRate:30,refresh:1e3,onRefresh:null,pause:!1,ttl:void 0},descriptors:{_scriptable:n=>n!=="onRefresh"}},Oa=[xy,Nn];Dt.register(Oa);var Sy=["widgetDataChart"];Dt.register(Oa,An,ra,ia,oa,aa,yo,Zu);var Os=(()=>{class n{theme=x.required();color=null;dataPath=null;dataSource=null;convertUnitTo=null;numDecimal=null;yScaleMin=null;yScaleMax=null;inverseYAxis=!1;verticalChart=null;datasetUUID=null;unitsService=A(He);dsService=A(Cn);ngZone=A(Je);canvasService=A(St);widgetDataChart=he("widgetDataChart",{read:nt});lineChartData={datasets:[]};lineChartOptions={parsing:!1,datasets:{line:{pointRadius:0,pointHoverRadius:0,tension:.4}},animations:{tension:{easing:"easeInOutCubic"}}};lineChartType="line";chart;dsServiceSub=null;datasetConfig=null;dataSourceInfo=null;isDestroyed=!1;lastChartSignature=null;config={datasetAverageArray:"sma",showAverageData:!1,trackAgainstAverage:!1,startScaleAtZero:!1,yScaleSuggestedMin:null,yScaleSuggestedMax:null,enableMinMaxScaleLimit:!1};constructor(){W(()=>{this.theme()&&z(()=>{this.datasetConfig&&(this.setChartOptions(),this.setDatasetsColors())})})}startChart(){if(!(this.isDestroyed||!this.datasetUUID)&&(this.datasetConfig=this.dsService.getDatasetConfig(this.datasetUUID),this.dataSourceInfo=this.dsService.getDataSourceInfo(this.datasetUUID),this.datasetConfig)){let e=this.buildChartSignature();if(this.chart&&e===this.lastChartSignature)return;this.chart&&e!==this.lastChartSignature&&this.destroyChart(),this.setChartOptions(),this.createDatasets();let i=this.widgetDataChart()?.nativeElement?.getContext("2d");if(!i)return;this.chart=new Dt(i,{type:this.lineChartType,data:this.lineChartData,options:this.lineChartOptions}),this.lastChartSignature=e,this.startStreaming()}}buildChartSignature(){return[this.datasetUUID,this.dataPath,this.dataSource,this.convertUnitTo,this.numDecimal,this.yScaleMin,this.yScaleMax,this.inverseYAxis?"1":"0",this.verticalChart?"1":"0",this.color].join("|")}setChartOptions(){this.lineChartOptions.maintainAspectRatio=!1,this.lineChartOptions.animation=!1,this.lineChartOptions.indexAxis=this.verticalChart?"y":"x",this.verticalChart?this.lineChartOptions.scales={x:{display:!1,position:"right",suggestedMin:this.config.enableMinMaxScaleLimit?null:this.yScaleMin,suggestedMax:this.config.enableMinMaxScaleLimit?null:this.yScaleMax,min:this.config.enableMinMaxScaleLimit?this.yScaleMin:null,max:this.config.enableMinMaxScaleLimit?this.yScaleMax:null,beginAtZero:this.config.startScaleAtZero,reverse:this.inverseYAxis,title:{display:!1,text:"Value Axis",align:"center"},ticks:{maxTicksLimit:8,precision:this.numDecimal,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!1,color:this.theme().contrastDimmer}},y:{type:"realtime",display:!1,title:{display:!1},time:{unit:this.datasetConfig.timeScaleFormat,minUnit:"second",round:"second",displayFormats:{hour:"k:mm''",minute:"mm''",second:'ss"',millisecond:"SSS"}},ticks:{autoSkip:!1,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!1,color:this.theme().contrastDimmer}}}:this.lineChartOptions.scales={x:{type:"realtime",display:!1,title:{display:!1},time:{unit:this.datasetConfig.timeScaleFormat,minUnit:"second",round:"second",displayFormats:{hour:"k:mm''",minute:"mm''",second:'ss"',millisecond:"SSS"}},ticks:{autoSkip:!1,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!1,color:this.theme().contrastDimmer}},y:{display:!1,position:"right",suggestedMin:this.config.enableMinMaxScaleLimit?null:this.yScaleMin,suggestedMax:this.config.enableMinMaxScaleLimit?null:this.yScaleMax,min:this.config.enableMinMaxScaleLimit?this.yScaleMin:null,max:this.config.enableMinMaxScaleLimit?this.yScaleMax:null,beginAtZero:this.config.startScaleAtZero,reverse:this.inverseYAxis,title:{display:!1,text:"Value Axis",align:"center"},ticks:{maxTicksLimit:8,precision:this.numDecimal,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!1,color:this.theme().contrastDimmer}}},this.lineChartOptions.plugins={legend:{display:!1},streaming:{duration:this.dataSourceInfo.maxDataPoints*this.dataSourceInfo.sampleTime,delay:this.dataSourceInfo.sampleTime,frameRate:this.datasetConfig.timeScaleFormat==="day"?5:this.datasetConfig.timeScaleFormat==="hour"?8:this.datasetConfig.timeScaleFormat==="minute"?15:30}}}createDatasets(){let e=this.lineChartOptions.scales?.y?.reverse?"start":!0;this.lineChartData.datasets=[],this.lineChartData.datasets.push({label:"Value",data:[],order:0,parsing:!1,tension:.4,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:3,fill:e}),this.lineChartData.datasets.push({label:"Average",data:[],order:1,parsing:!1,tension:.4,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:3,fill:e}),this.setDatasetsColors()}setDatasetsColors(){this.lineChartData.datasets.forEach(e=>{e.borderColor=this.getThemeColors().averageLine,e.backgroundColor=this.getThemeColors().averageFill})}getThemeColors(){let e=this.color,t={valueLine:null,valueFill:null,averageLine:null,averageFill:null,averageChartLine:null,chartLabel:null,chartValue:null};switch(e){case"contrast":this.config.trackAgainstAverage?(t.valueLine=this.theme().contrastDimmer,t.valueFill=this.theme().contrastDimmer,t.averageLine=this.theme().contrast,t.averageFill=this.theme().contrast,t.chartValue=t.averageLine):(t.valueLine=this.theme().contrast,t.valueFill=this.theme().contrast,t.averageLine=this.theme().contrastDimmer,t.averageFill=this.theme().contrastDimmer,t.chartValue=this.theme().contrast),t.averageChartLine=this.theme().contrastDim,t.chartLabel=this.theme().contrastDim;break;case"blue":this.config.trackAgainstAverage?(t.valueLine=this.theme().blueDimmer,t.valueFill=this.theme().blueDimmer,t.averageLine=this.theme().blue,t.averageFill=this.theme().blue,t.chartValue=t.averageLine):(t.valueLine=this.theme().blue,t.valueFill=this.theme().blue,t.averageLine=this.theme().blueDimmer,t.averageFill=this.theme().blueDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().blueDim,t.chartLabel=this.theme().contrastDim;break;case"green":this.config.trackAgainstAverage?(t.valueLine=this.theme().greenDimmer,t.valueFill=this.theme().greenDimmer,t.averageLine=this.theme().green,t.averageFill=this.theme().green,t.chartValue=t.averageLine):(t.valueLine=this.theme().green,t.valueFill=this.theme().green,t.averageLine=this.theme().greenDimmer,t.averageFill=this.theme().greenDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().greenDim,t.chartLabel=this.theme().contrastDim;break;case"pink":this.config.trackAgainstAverage?(t.valueLine=this.theme().pinkDimmer,t.valueFill=this.theme().pinkDimmer,t.averageLine=this.theme().pink,t.averageFill=this.theme().pink,t.chartValue=t.averageLine):(t.valueLine=this.theme().pink,t.valueFill=this.theme().pink,t.averageLine=this.theme().pinkDimmer,t.averageFill=this.theme().pinkDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().pinkDim,t.chartLabel=this.theme().contrastDim;break;case"orange":this.config.trackAgainstAverage?(t.valueLine=this.theme().orangeDimmer,t.valueFill=this.theme().orangeDimmer,t.averageLine=this.theme().orange,t.averageFill=this.theme().orange,t.chartValue=t.averageLine):(t.valueLine=this.theme().orange,t.valueFill=this.theme().orange,t.averageLine=this.theme().orangeDimmer,t.averageFill=this.theme().orangeDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().orangeDim,t.chartLabel=this.theme().contrastDim;break;case"purple":this.config.trackAgainstAverage?(t.valueLine=this.theme().purpleDimmer,t.valueFill=this.theme().purpleDimmer,t.averageLine=this.theme().purple,t.averageFill=this.theme().purple,t.chartValue=t.averageLine):(t.valueLine=this.theme().purple,t.valueFill=this.theme().purple,t.averageLine=this.theme().purpleDimmer,t.averageFill=this.theme().purpleDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().purpleDim,t.chartLabel=this.theme().contrastDim;break;case"grey":this.config.trackAgainstAverage?(t.valueLine=this.theme().greyDimmer,t.valueFill=this.theme().greyDimmer,t.averageLine=this.theme().grey,t.averageFill=this.theme().grey,t.chartValue=t.averageLine):(t.valueLine=this.theme().grey,t.valueFill=this.theme().grey,t.averageLine=this.theme().greyDimmer,t.averageFill=this.theme().greyDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().greyDim,t.chartLabel=this.theme().contrastDim;break;case"yellow":this.config.trackAgainstAverage?(t.valueLine=this.theme().yellowDimmer,t.valueFill=this.theme().yellowDimmer,t.averageLine=this.theme().yellow,t.averageFill=this.theme().yellow,t.chartValue=t.averageLine):(t.valueLine=this.theme().yellow,t.valueFill=this.theme().yellow,t.averageLine=this.theme().yellowDimmer,t.averageFill=this.theme().yellowDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().yellowDim,t.chartLabel=this.theme().contrastDim;break}return t}startStreaming(){this.dsServiceSub?.unsubscribe();let e=this.dsService.getDatasetBatchThenLiveObservable(this.datasetUUID);this.dsServiceSub=e?.subscribe(t=>{if(!(this.isDestroyed||!this.chart||!this.chart.ctx)){if(Array.isArray(t)){let o=this.transformDatasetRows(t,0);if(this.chart.data.datasets[0].data.push(...o),this.config.showAverageData){let r=this.transformDatasetRows(t,this.config.datasetAverageArray);this.chart.data.datasets[1].data.push(...r)}}else{let o=this.transformDatasetRows([t],0)[0];if(this.chart.data.datasets[0].data.push(o),this.config.showAverageData){let r=this.transformDatasetRows([t],this.config.datasetAverageArray)[0];this.chart.data.datasets[1].data.push(r)}}this.ngZone.runOutsideAngular(()=>{if(this.isDestroyed||!this.chart)return;let o=this.chart;o.ctx&&o.update("none")})}})}destroyChart(){this.dsServiceSub?.unsubscribe(),this.dsServiceSub=null,this.chart?.destroy(),this.chart=null,this.lastChartSignature=null}transformDatasetRows(e,t){let i=s=>this.unitsService.convertToUnit(this.convertUnitTo,s),o=this.verticalChart,r=this.config.datasetAverageArray;return e.map(s=>{if(o){if(t===0)return{x:i(s.data.value),y:s.timestamp};{let l={sma:s.data.sma,ema:s.data.ema,dema:s.data.doubleEma,avg:s.data.lastAverage};return{x:i(l[r]),y:s.timestamp}}}else{if(t===0)return{x:s.timestamp,y:i(s.data.value)};{let l={sma:s.data.sma,ema:s.data.ema,dema:s.data.doubleEma,avg:s.data.lastAverage};return{x:s.timestamp,y:i(l[r])}}}})}ngOnDestroy(){this.isDestroyed=!0,this.destroyChart();let e=this.widgetDataChart?.()?.nativeElement;this.canvasService.releaseCanvas(e,{clear:!0,removeFromDom:!0})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["minichart"]],viewQuery:function(t,i){t&1&&_e(i.widgetDataChart,Sy,5,nt),t&2&&Me()},inputs:{theme:[1,"theme"]},decls:2,vars:0,consts:[["widgetDataChart",""],[2,"z-index","inherit"]],template:function(t,i){t&1&&ee(0,"canvas",1,0)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:calc(90% - 10px);position:absolute;bottom:0;border-radius:12px;overflow:hidden}"],changeDetection:0})}return n})();var Be=(()=>{class n{_streamsConfig=w(void 0);dataService=A(st);unitsService=A(He);destroyRef=A(Ie);streams;registrations=[];subscriptions=new Map;baseSignatures=new Map;reset$=new Zt;rootSignature;buildObserver(e,t){return{next:i=>t(i),error:i=>console.error("[Widget] Observer got an error: "+i),complete:()=>{}}}computePathSignature(e){let t=this.normalizePath(e.path)??"",i=e.source?.trim()||"default";return[t,e.pathType,e.sampleTime,e.convertUnitTo,i,e.suppressBootstrapNull?"1":"0"].join("|")}computeBaseKey(e,t){let i=this.normalizePath(e)??"",o=t?.trim()||"default";return`${i}|${o}`}normalizePath(e){if(typeof e!="string")return;let t=e.trim();return t.length?t:void 0}computeRootSignature(e){return e?`timeout:${e.enableTimeout?"1":"0"}:${e.dataTimeout??""}`:"none"}ensureStreamsMap(){this.streams||(this.streams=new Map)}buildAndSubscribe(e,t,i,o){let r=this.normalizePath(o.path);if(!r){let ue=this.subscriptions.get(e);ue&&ue.sub.unsubscribe(),this.subscriptions.delete(e),this.streams?.delete(e),this.baseSignatures.delete(e);return}this.ensureStreamsMap();let s=this.computeBaseKey(r,o.source),l=this.baseSignatures.get(e);(!this.streams.has(e)||l!==s)&&(this.streams.set(e,this.dataService.subscribePath(r,o.source?.trim()||"default")),this.baseSignatures.set(e,s));let m=this.streams.get(e),h=!!i.enableTimeout,v=(i.dataTimeout??5)*1e3,y=5e3,C=`[Widget] ${i.displayName} - ${v/1e3} second data update timeout reached for `,S=`[Widget] ${i.displayName} - Retrying in ${y/1e3} seconds`,_=o.pathType,F=o.convertUnitTo,E=!!o.suppressBootstrapNull,N=Number(o.sampleTime);(!Number.isFinite(N)||N<=0)&&(N=1e3);let U=ue=>F?this.unitsService.convertToUnit(F,ue):ue,j=m;_==="number"&&(j=j.pipe(si(ue=>({data:{value:ue.data.value==null?null:U(ue.data.value),timestamp:ue.data.timestamp},state:ue.state})))),E&&(j=j.pipe(Dc(ue=>ue?.data?.value==null)));let B=j.pipe(mi(1)),re=j.pipe(kc(N));j=wi(B,re),h&&(j=j.pipe(Cc({each:v,with:()=>Ac(()=>{console.log(C+r),this.dataService.timeoutPathObservable(r,_)})}),Tc(ue=>ue.pipe($r(()=>console.log(S)),_c(()=>xa(y))))));let pe=this.buildObserver(e,t),te=j.pipe(qr(this.reset$),De(this.destroyRef)).subscribe(pe),se=ge(Z({},o),{path:r}),de=this.computePathSignature(se),ce=this.subscriptions.get(e);ce&&ce.sub.unsubscribe(),this.subscriptions.set(e,{sub:te,signature:de})}setStreamsConfig(e){this._streamsConfig.set(e),this.rootSignature=this.computeRootSignature(e)}applyStreamsConfigDiff(e){let t=this._streamsConfig(),i=this.rootSignature,o=this.computeRootSignature(e);if(this._streamsConfig.set(e),this.rootSignature=o,!t||!t.paths||!Object.keys(t.paths).length)return;if(!e||!e.paths){this.subscriptions.forEach(h=>h.sub.unsubscribe()),this.subscriptions.clear(),this.streams=void 0,this.baseSignatures.clear(),this.registrations=[];return}let r=Object.keys(t.paths),s=Object.keys(e.paths),l=r.filter(h=>!s.includes(h));for(let h of l){let v=this.subscriptions.get(h);v&&v.sub.unsubscribe(),this.subscriptions.delete(h),this.streams?.delete(h),this.baseSignatures.delete(h),this.registrations=this.registrations.filter(y=>y.pathName!==h)}let m=i!==o;for(let h of s){let v=e.paths[h],y=this.normalizePath(v?.path);if(!y){let F=this.subscriptions.get(h);F&&F.sub.unsubscribe(),this.subscriptions.delete(h),this.streams?.delete(h),this.baseSignatures.delete(h);continue}let C=ge(Z({},v),{path:y}),S=this.computePathSignature(C),_=this.subscriptions.get(h);if(!_||_.signature!==S||m){_&&(_.sub.unsubscribe(),this.subscriptions.delete(h));let F=this.registrations.find(E=>E.pathName===h);F&&this.buildAndSubscribe(h,F.next,e,C)}}}observe(e,t){let i=this.registrations.find(v=>v.pathName===e)?.next;this.registrations=this.registrations.filter(v=>v.pathName!==e),this.registrations.push({pathName:e,next:t});let o=this._streamsConfig();if(!o||!o.paths?.[e]){let v=this.subscriptions.get(e);v&&(v.sub.unsubscribe(),this.subscriptions.delete(e),this.streams?.delete(e),this.baseSignatures.delete(e));return}let r=o.paths[e],s=this.normalizePath(r?.path);if(!s){let v=this.subscriptions.get(e);v&&(v.sub.unsubscribe(),this.subscriptions.delete(e),this.streams?.delete(e),this.baseSignatures.delete(e)),this.registrations=this.registrations.filter(y=>y.pathName!==e);return}let l=ge(Z({},r),{path:s}),m=this.computePathSignature(l),h=this.subscriptions.get(e);h&&h.signature===m&&i===t||this.buildAndSubscribe(e,t,o,l)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["","widget-streams",""]],exportAs:["widgetStreams"]})}return n})();function Ce(n,a){let e={contrast:{color:a.contrast,dim:a.contrastDim,dimmer:a.contrastDimmer},blue:{color:a.blue,dim:a.blueDim,dimmer:a.blueDimmer},green:{color:a.green,dim:a.greenDim,dimmer:a.greenDimmer},pink:{color:a.pink,dim:a.pinkDim,dimmer:a.pinkDimmer},orange:{color:a.orange,dim:a.orangeDim,dimmer:a.orangeDimmer},purple:{color:a.purple,dim:a.purpleDim,dimmer:a.purpleDimmer},yellow:{color:a.yellow,dim:a.yellowDim,dimmer:a.yellowDimmer},grey:{color:a.grey,dim:a.greyDim,dimmer:a.greyDimmer}},t=n in e?n:"contrast";return e[t]}function ht(n,a,e,t){if(t||!n||!e)return a;switch(n){case J.Nominal:return e.zoneNominal;case J.Alarm:return e.zoneAlarm;case J.Warn:return e.zoneWarn;case J.Alert:return e.zoneAlert;default:return a}}var _y=["canvasMainRef"];function My(n,a){if(n&1&&O(0,"minichart",1),n&2){let e=T();R("theme",e.theme())}}var Xm=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Gauge Label",filterSelfPaths:!0,paths:{numericPath:{description:"Numeric Data",path:null,source:null,pathType:"number",suppressBootstrapNull:!0,isPathConfigurable:!0,convertUnitTo:"unitless",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500}},showMax:!1,showMin:!1,numDecimal:1,showMiniChart:!1,yScaleMin:0,yScaleMax:10,inverseYAxis:!1,verticalChart:!1,color:"contrast",enableTimeout:!1,dataTimeout:5,ignoreZones:!1};runtime=A(xe);stream=A(Be);canvas=A(St);datasetLifecycle=A(So);miniChart=he(Os);canvasMainRef=he.required("canvasMainRef");showMiniChart=w(!1);labelColor=w(void 0);canvasElement;canvasCtx;cssWidth=0;cssHeight=0;backgroundBitmap=null;backgroundBitmapText=null;dataValue=null;maxValue=null;minValue=null;valueColor=void 0;valueStateColor=void 0;maxValueTextWidth=0;maxValueTextHeight=0;maxMinMaxTextWidth=0;maxMinMaxTextHeight=0;streamRegistered=!1;pathDataState=null;isDestroyed=!1;lastSubscriptionSignature=null;subscriptionSignature=L(()=>{let t=this.runtime?.options()?.paths?.numericPath;if(!t?.path)return null;let i=t.source?.trim()||"default";return[t.path,t.pathType,t.sampleTime,t.convertUnitTo,i,t.suppressBootstrapNull?"1":"0"].join("|")});onNumericValue=e=>{if(this.dataValue=e.data.value,this.minValue===null||this.dataValue<this.minValue?this.minValue=this.dataValue:(this.maxValue===null||this.dataValue>this.maxValue)&&(this.maxValue=this.dataValue),!this.runtime?.options().ignoreZones&&this.pathDataState!==e.state)switch(this.pathDataState=e.state,e.state){case J.Alarm:this.valueStateColor=this.theme().zoneAlarm;break;case J.Warn:this.valueStateColor=this.theme().zoneWarn;break;case J.Alert:this.valueStateColor=this.theme().zoneAlert;break;default:this.valueStateColor=this.valueColor;break}this.drawWidget()};constructor(){this.showMiniChart.set(this.runtime.options().showMiniChart),W(()=>{let e=this.theme(),t=this.runtime?.options()?.color;z(()=>{e&&t!==void 0&&(this.setColors(),this.drawWidget())})}),W(()=>{let e=this.subscriptionSignature();z(()=>{this.isDestroyed||!this.canvasCtx||e===this.lastSubscriptionSignature&&this.streamRegistered||(this.minValue=null,this.maxValue=null,this.dataValue=null,this.pathDataState=null,this.lastSubscriptionSignature=e,e&&(this.stream?.observe("numericPath",this.onNumericValue),this.streamRegistered=!0,this.manageDatasetAndChart()))})}),W(()=>{let e=this.showMiniChart(),t=this.miniChart(),i=this.runtime?.options(),o=i?.paths?.numericPath;[i?.showMiniChart?"1":"0",o?.path??"",o?.source??"default",o?.convertUnitTo??"",i?.numDecimal??"",i?.yScaleMin??"",i?.yScaleMax??"",i?.inverseYAxis?"1":"0",i?.verticalChart?"1":"0",i?.color??""].join("|")&&e&&t&&(this.setMiniChart(),this.miniChart().startChart())})}ngOnInit(){this.setColors(),this.canvasElement=this.canvasMainRef().nativeElement,this.canvasCtx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.calculateMaxMinTextDimensions(),this.drawWidget()}})}ngAfterViewInit(){this.isDestroyed||!this.streamRegistered&&this.subscriptionSignature()&&(this.stream?.observe("numericPath",this.onNumericValue),this.streamRegistered=!0,this.manageDatasetAndChart())}calculateMaxMinTextDimensions(){this.maxValueTextWidth=Math.floor(this.cssWidth*.85),this.maxValueTextHeight=Math.floor(this.cssHeight*.7),this.maxMinMaxTextWidth=Math.floor(this.cssWidth*.57),this.maxMinMaxTextHeight=Math.floor(this.cssHeight*.1)}manageDatasetAndChart(){let e=this.runtime.options(),t=e.paths.numericPath,i=!!e.showMiniChart;if(this.showMiniChart.set(i),!i){this.datasetLifecycle.removeDatasetIfExists(this.id(),!1);return}if(!t||!t.path)return;let o=t.source??"default";this.datasetLifecycle.syncNumericMiniChartDataset(this.id(),t.path,o)}setMiniChart(){let e=this.runtime.options(),t=e.paths.numericPath;this.miniChart().dataPath=t?.path??null,this.miniChart().dataSource=t?.source??"default",this.miniChart().color=e.color,this.miniChart().convertUnitTo=t?.convertUnitTo,this.miniChart().numDecimal=e.numDecimal,this.miniChart().yScaleMin=e.yScaleMin,this.miniChart().yScaleMax=e.yScaleMax,this.miniChart().inverseYAxis=e.inverseYAxis,this.miniChart().verticalChart=e.verticalChart,this.miniChart().datasetUUID=this.id()}setColors(){let e=this.runtime.options();e&&(this.labelColor.set(Ce(e.color,this.theme()).dim),this.valueStateColor=this.valueColor=Ce(e.color,this.theme()).color,this.backgroundBitmap=null,this.backgroundBitmapText=null)}drawWidget(){if(!this.canvasCtx)return;let e=this.runtime.options();if(!e)return;let t=e.paths.numericPath.convertUnitTo,i=10*this.canvas.scaleFactor,o=5*this.canvas.scaleFactor,r=e.displayName+"|"+t;(!this.backgroundBitmap||this.backgroundBitmap.width!==this.canvasElement.width||this.backgroundBitmap.height!==this.canvasElement.height||this.backgroundBitmapText!==r)&&(this.backgroundBitmap=this.canvas.renderStaticToBitmap(this.canvasCtx,this.cssWidth,this.cssHeight,s=>{this.canvas.drawTitleInternal(s,e.displayName,this.labelColor(),"normal",this.cssWidth,this.cssHeight,.1),["unitless","percent","ratio","latitudeSec","latitudeMin","longitudeSec","longitudeMin"].includes(t)||this.canvas.drawText(s,t,this.cssWidth-i,this.cssHeight-o,Math.floor(this.cssWidth*.25),Math.floor(this.cssHeight*.15),"bold",this.valueColor,"end","bottom")}),this.backgroundBitmapText=r),this.canvas.clearCanvas(this.canvasCtx,this.cssWidth,this.cssHeight),this.backgroundBitmap&&this.backgroundBitmap.width>0&&this.backgroundBitmap.height>0&&this.canvasCtx.drawImage(this.backgroundBitmap,0,0,this.cssWidth,this.cssHeight),this.drawValue(),(e.showMax||e.showMin)&&this.drawMinMax()}drawValue(){let e=this.getValueText();this.canvas.drawText(this.canvasCtx,e,Math.floor(this.cssWidth/2),Math.floor(this.cssHeight/2*1.15),this.maxValueTextWidth,this.maxValueTextHeight,"bold",this.valueStateColor)}getValueText(){if(this.dataValue===null)return"--";let e=this.runtime.options().paths.numericPath.convertUnitTo;return["latitudeSec","latitudeMin","longitudeSec","longitudeMin","D HH:MM:SS"].includes(e)?this.dataValue.toString():this.applyDecorations(this.dataValue.toFixed(this.runtime.options().numDecimal))}drawMinMax(){let e=this.runtime.options();if(!e.showMin&&!e.showMax)return;let t="";e.showMin&&(t=this.minValue!=null?` Min: ${this.applyDecorations(this.minValue.toFixed(e.numDecimal))}`:" Min: --"),e.showMax&&(t+=this.maxValue!=null?` Max: ${this.applyDecorations(this.maxValue.toFixed(e.numDecimal))}`:" Max: --"),t=t.trim();let i=10*this.canvas.scaleFactor,o=5*this.canvas.scaleFactor;this.canvas.drawText(this.canvasCtx,t,i,Math.floor(this.cssHeight-o),this.maxMinMaxTextWidth,this.maxMinMaxTextHeight,"normal",this.valueColor,"start","bottom")}applyDecorations(e){switch(this.runtime.options().paths.numericPath.convertUnitTo){case"percent":case"percentraw":e+="%";break}return e}ngOnDestroy(){this.isDestroyed=!0,this.datasetLifecycle.removeDatasetIfExists(this.id(),!1);try{this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-numeric"]],viewQuery:function(t,i){t&1&&_e(i.miniChart,Os,5)(i.canvasMainRef,_y,5),t&2&&Me(2)},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:3,vars:1,consts:[["canvasMainRef",""],[3,"theme"],[1,"numeric-canvas"]],template:function(t,i){t&1&&(I(0,My,1,1,"minichart",1),O(1,"canvas",2,0)),t&2&&P(i.showMiniChart()?0:-1)},dependencies:[Os],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}.numeric-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;min-height:1px}.numeric-canvas[_ngcontent-%COMP%]{position:relative;width:100%!important;height:100%!important;display:block}"],changeDetection:0})}return n})();var Ty=["canvasMainRef"],Zm=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={displayName:"Gauge Label",filterSelfPaths:!0,paths:{stringPath:{description:"String Data",path:null,source:null,pathType:"string",isPathConfigurable:!0,sampleTime:500}},color:"contrast",enableTimeout:!1,dataTimeout:5};runtime=A(xe);stream=A(Be);canvas=A(St);canvasMainRef=he.required("canvasMainRef");canvasElement;canvasCtx;titleBitmap=null;titleBitmapText=null;cssWidth=0;cssHeight=0;dataValue=null;labelColor=w(void 0);valueColor=void 0;isDestroyed=!1;streamRegistered=!1;constructor(){W(()=>{let e=this.theme();z(()=>{this.runtime?.options()&&e&&(this.setColors(),this.drawWidget())})}),W(()=>{this.runtime?.options()&&(this.isDestroyed||!this.canvasCtx||z(()=>{this.setColors(),this.startWidget(),this.drawWidget()}))})}ngOnInit(){this.setColors()}ngAfterViewInit(){this.canvasElement=this.canvasMainRef().nativeElement,this.canvasCtx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.drawWidget()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),!this.isDestroyed&&this.startWidget()}startWidget(){this.dataValue=null,this.streamRegistered||(this.runtime?.options()?.paths?.stringPath?.path?(this.stream.observe("stringPath",t=>{this.dataValue=t.data.value,this.drawWidget()}),this.streamRegistered=!0):this.drawWidget())}setColors(){let e=this.runtime?.options();e&&(this.labelColor.set(Ce(e.color,this.theme()).dim),this.valueColor=Ce(e.color,this.theme()).color)}ngOnDestroy(){this.isDestroyed=!0;try{this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}drawWidget(){if(!this.canvasCtx)return;let e=Math.floor(this.cssHeight*.1),t=this.runtime.options(),i=t.displayName+"|"+this.labelColor();(!this.titleBitmap||this.titleBitmap.width!==this.canvasElement.width||this.titleBitmap.height!==this.canvasElement.height||this.titleBitmapText!==i)&&(this.titleBitmap=this.canvas.createTitleBitmap(t.displayName,this.labelColor(),"normal",this.cssWidth,this.cssHeight),this.titleBitmapText=t.displayName+"|"+this.labelColor()),this.canvas.clearCanvas(this.canvasCtx,this.cssWidth,this.cssHeight),this.titleBitmap&&this.titleBitmap.width>0&&this.titleBitmap.height>0&&this.canvasCtx.drawImage(this.titleBitmap,0,0,this.cssWidth,this.cssHeight);let o=this.dataValue===null?"--":this.dataValue,r=this.canvas.EDGE_BUFFER||10,s=Math.max(0,this.cssHeight-e-2*r),l=Math.max(0,Math.floor(this.cssWidth-2*r)),m=Math.max(0,Math.floor(s)),h=Math.floor(this.cssWidth/2),v=Math.floor(e+r+s/2);this.canvas.drawText(this.canvasCtx,o,h,v,l,m,"bold",this.valueColor,"center","middle")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-text"]],viewQuery:function(t,i){t&1&&_e(i.canvasMainRef,Ty,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:0,consts:[["canvasMainRef",""],[1,"text-canvas"]],template:function(t,i){t&1&&ee(0,"canvas",1,0)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;overflow:hidden}.text-canvas[_ngcontent-%COMP%]{display:block;width:100%!important;height:100%!important;min-height:1px}"],changeDetection:0})}return n})();var ky=["widgetDataChart"];Dt.register(Oa,An,ra,ia,oa,aa,yo,As,Cs);var Qm=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe,{optional:!0});static DEFAULT_CONFIG={filterSelfPaths:!0,color:"contrast",timeScale:"Last 30 Minutes"};ngZone=A(Je);_dataset=A(Cn);datasetLifecycle=A(So);canvasService=A(St);unitsService=A(He);responsive=A(no);isPhonePortrait;widgetDataChart=he("widgetDataChart",{read:nt});lineChartData={datasets:[]};lineChartOptions={parsing:!1,datasets:{line:{pointRadius:0,pointHoverRadius:0,tension:.3}},animations:{tension:{easing:"easeInOutCubic"}}};lineChartType="line";chart;_dsDirectionSub=null;_dsSpeedSub=null;datasetConfig=null;dataSourceInfo=null;xCenter=null;xStep=null;xCenterSpeed=null;xStepSpeed=null;CENTER_LINE_WIDTH=4;GRID_LINE_WIDTH=1;EDGE_EXTEND_UP_PX=42;EDGE_SPEED_LABEL_OFFSET=5;EDGE_DIR_LABEL_OFFSET=5;TICK_LABEL_FONT_SIZE=20;TICK_LABEL_PHONE_PORTRAIT_FONT_SIZE=11;CENTER_LABEL_FONT_SIZE=22;CENTER_LABEL_PHONE_PORTRAIT_FONT_SIZE=13;SPEED_VALUE_FONT_SIZE=62;SPEED_VALUE_PHONE_PORTRAIT_FONT_SIZE=32;TOP_VALUE_Y_OFFSET=62;TOP_VALUE_PHONE_PORTRAIT_Y_OFFSET=44;TOP_UNIT_Y_OFFSET=51;TOP_UNIT_PHONE_PORTRAIT_Y_OFFSET=38;UNIT_FONT_SIZE=28;UNIT_PHONE_PORTRAIT_FONT_SIZE=14;UNIT_PADDING=8;UNIT_PHONE_PORTRAIT_PADDING=3;gridBackgroundPlugin={id:"xSpeedGridBackground",beforeDraw:e=>{let t=e.chartArea;if(!t)return;let i=e.ctx,o=this.theme();i.save(),i.globalCompositeOperation="destination-over",i.fillStyle=o.background,i.fillRect(t.left,t.top,t.width/2,t.height),i.restore()}};centerTickPlugin={id:"centerTickStyle",afterDraw:e=>{let t=e.ctx,i=e.chartArea,o=this.theme(),r=this.getThemeColors(),s=Dt.defaults.font,l=e.scales,m=e.options?.scales,h=e.data?.datasets?.[0]?.data,v=e.data?.datasets?.[5]?.data,y=(h?.length??0)>=2&&(v?.length??0)>=2,C=(pe,te)=>{let se=l?.[pe],de=m;if(!se)return;let ce=se,ue=de?.[pe]?.min??ce.min,me=de?.[pe]?.max??ce.max;if(typeof ue!="number"||typeof me!="number"||!isFinite(ue)||!isFinite(me))return;let Se=(ue+me)/2,qe=se.getPixelForValue(Se);t.save(),t.strokeStyle=o.contrastDim,t.lineWidth=this.CENTER_LINE_WIDTH,t.beginPath(),t.moveTo(qe,i.top),t.lineTo(qe,i.bottom),t.stroke(),t.restore(),t.save(),t.fillStyle=o.contrastDim,t.font=this.isPhonePortrait().matches?`bold ${this.CENTER_LABEL_PHONE_PORTRAIT_FONT_SIZE}px ${s.family}`:`bold ${this.CENTER_LABEL_FONT_SIZE}px ${s.family}`,t.textAlign="center",t.textBaseline="top";let pt=this.axisTopLabelY(se);t.fillText(te(Se),qe,pt),t.restore()};C("x",pe=>`${((pe%360+360)%360).toFixed(0)}\xB0`),C("xSpeed",pe=>`${pe.toFixed(1)}`);let S=l?.xSpeed;if(S){let pe=m,te=S,se=pe?.xSpeed?.max??te.max;if(typeof se=="number"&&isFinite(se)){let de=S.getPixelForValue(se);t.save(),t.fillStyle=this.resolveTickColor(e,S,se),t.font=this.isPhonePortrait().matches?`normal ${this.TICK_LABEL_PHONE_PORTRAIT_FONT_SIZE}px ${s.family}`:`normal ${this.TICK_LABEL_FONT_SIZE}px ${s.family}`,t.textAlign="right",t.textBaseline="top";let ce=this.axisTopLabelY(S),ue=this.xStepSpeed??1,me=Math.max(0,Math.min(3,Math.ceil(-Math.log10(ue))));t.fillText(`${se.toFixed(me)}`,de-this.EDGE_SPEED_LABEL_OFFSET,ce),t.restore(),t.save(),t.strokeStyle=o.contrastDim,t.lineWidth=this.GRID_LINE_WIDTH,t.beginPath();let Se=Math.round(de)+.5;t.moveTo(Se,i.bottom),t.lineTo(Se,i.top-this.EDGE_EXTEND_UP_PX),t.stroke(),t.restore()}}let _=l?.x;if(_){let pe=m,te=_,se=pe?.x?.min??te.min;if(typeof se=="number"&&isFinite(se)){let de=_.getPixelForValue(se);t.save(),t.fillStyle=this.resolveTickColor(e,_,se),t.font=this.isPhonePortrait().matches?`normal ${this.TICK_LABEL_PHONE_PORTRAIT_FONT_SIZE}px ${s.family}`:`normal ${this.TICK_LABEL_FONT_SIZE}px ${s.family}`,t.textAlign="left",t.textBaseline="top";let ce=this.axisTopLabelY(_),ue=this.normalizeAngle(se);t.fillText(`${ue.toFixed(0)}\xB0`,de+this.EDGE_DIR_LABEL_OFFSET,ce),t.restore()}}let F=e.data?.datasets,E=F?.[5]?.data,N=E?.length?E.length-1:-1,U=N>=0?E[N]?.x:void 0;if(typeof U=="number"&&isFinite(U)){t.save(),t.fillStyle=r.chartValue,t.font=this.isPhonePortrait().matches?`bold ${this.SPEED_VALUE_PHONE_PORTRAIT_FONT_SIZE}px ${s.family}`:`bold ${this.SPEED_VALUE_FONT_SIZE}px ${s.family}`,t.textAlign="center",t.textBaseline="middle";let pe=`${U.toFixed(1)}`,te=i.left+i.width/4,se=i.top-(this.isPhonePortrait().matches?this.TOP_VALUE_PHONE_PORTRAIT_Y_OFFSET:this.TOP_VALUE_Y_OFFSET);t.fillText(pe,te,se);let de=t.measureText(pe),ce=te+de.width/2+(this.isPhonePortrait().matches?this.UNIT_PHONE_PORTRAIT_PADDING:this.UNIT_PADDING),ue=i.top-(this.isPhonePortrait().matches?this.TOP_UNIT_PHONE_PORTRAIT_Y_OFFSET:this.TOP_UNIT_Y_OFFSET);t.font=this.isPhonePortrait().matches?`bold ${this.UNIT_PHONE_PORTRAIT_FONT_SIZE}px ${s.family}`:`bold ${this.UNIT_FONT_SIZE}px ${s.family}`,t.textAlign="left",t.fillText("kts",ce,ue),t.restore()}let j=F?.[0]?.data,B=j?.length?j.length-1:-1,re=B>=0?j[B]?.x:void 0;if(typeof re=="number"&&isFinite(re)){let pe=this.normalizeAngle(re);t.save(),t.fillStyle=r.chartValue,t.font=this.isPhonePortrait().matches?`bold ${this.SPEED_VALUE_PHONE_PORTRAIT_FONT_SIZE}px ${s.family}`:`bold ${this.SPEED_VALUE_FONT_SIZE}px ${s.family}`,t.textAlign="center",t.textBaseline="middle",t.fillText(`${pe.toFixed(0)}\xB0`,i.left+3*i.width/4,i.top-(this.isPhonePortrait().matches?this.TOP_VALUE_PHONE_PORTRAIT_Y_OFFSET:this.TOP_VALUE_Y_OFFSET)),t.restore()}if(!y){let pe=Math.min(i.width*.7,420),te=90,se=i.left+(i.width-pe)/2,de=i.top+(i.height-te)/2;t.save(),t.globalAlpha=.82,t.fillStyle=o.background,t.fillRect(se,de,pe,te),t.restore(),t.save(),t.strokeStyle=o.contrastDim,t.lineWidth=2,t.strokeRect(se,de,pe,te),t.restore(),t.save(),t.fillStyle=this.getThemeColors().chartLabel,t.textAlign="center",t.textBaseline="middle",t.font=`bold 18px ${s.family}`,t.fillText("Data acquisition...",se+pe/2,de+te/2),t.restore()}}};constructor(){this.isPhonePortrait=Ii(this.responsive.observe(Ki.HandsetPortrait)),W(()=>{let e=this.theme(),t=this.runtime?.options();!e||!t||z(()=>{this.datasetConfig&&this.chart&&(this.setChartOptions(),this.setDatasetsColors(),this.ngZone.runOutsideAngular(()=>this.chart?.update("none")))})}),W(()=>{let e=this.runtime?.options();if(!e)return;!this.datasetConfig||this.datasetConfig.timeScaleFormat!==e.timeScale?(this.syncServiceDatasets(),this.startWidget()):this.chart&&this.setChartOptions()})}startWidget(){this.widgetDataChart()&&(this.datasetConfig=this._dataset.getDatasetConfig(`${this.id()}-twd`),this.dataSourceInfo=this._dataset.getDataSourceInfo(`${this.id()}-twd`),this.datasetConfig&&(this.createDatasets(),this.setChartOptions(),this.chart?this.ngZone.runOutsideAngular(()=>this.chart?.update("none")):(this.chart=new Dt(this.widgetDataChart().nativeElement.getContext("2d"),{type:this.lineChartType,data:this.lineChartData,options:this.lineChartOptions,plugins:[this.gridBackgroundPlugin,this.centerTickPlugin]}),this.ngZone.runOutsideAngular(()=>this.chart?.update("none"))),this.startStreaming()))}syncServiceDatasets(){let e=this.runtime?.options();!e||e.timeScale===""||this.datasetLifecycle.syncWindTrendsDatasets(this.id(),e.timeScale)}setChartOptions(){this.lineChartOptions.maintainAspectRatio=!1,this.lineChartOptions.animation=!1,this.lineChartOptions.indexAxis="y";let e=0,t=360,i=(t-e)/4,o=0,r=20,s=(r-o)/4;this.lineChartOptions.scales={y:{type:"linear",display:!0,position:"right",reverse:!0,title:{display:!0,text:`${this.datasetConfig.timeScaleFormat}`,align:"center"},ticks:{count:6,autoSkip:!1,includeBounds:!0,align:"inner",major:{enabled:!0},font:this.isPhonePortrait().matches?{size:12}:{size:16},callback:l=>{let m=Number(l),h=this.datasetConfig?.timeScaleFormat,v=this.getWindowMs(h);return h==="Last 5 Minutes"?`${Math.round(m/6e4)}'`:v>=10*6e4?`${Math.round(m/6e4)}'`:`${Math.round(m/1e3)}"`}},grid:{display:!0,color:this.theme().contrastDimmer}},x:{type:"linear",position:"top",stack:"trends",beginAtZero:!1,bounds:"ticks",min:e,max:t,title:{display:!1},ticks:{count:5,align:"inner",autoSkip:!1,includeBounds:!0,stepSize:i,minRotation:0,maxRotation:0,callback:l=>{let m=this.xCenter??Number.NaN;if(this.nearlyEqual(l,m))return"";let v=this.chart?.options?.scales?.x?.min;return typeof v=="number"&&this.nearlyEqual(l,v)?"":`${((l%360+360)%360).toFixed(0)}\xB0`},font:l=>{let m=l.tick?.value??Number.NaN,h=this.xCenter??Number.NaN,v=this.nearlyEqual(m,h);return this.isPhonePortrait().matches?{size:11,weight:v?"bold":"normal"}:{size:20,weight:v?"bold":"normal"}},color:l=>{let m=l.tick?.value??Number.NaN,h=this.xCenter??Number.NaN;return this.nearlyEqual(m,h)?this.theme().contrast:void 0}},grid:{display:!0,color:l=>{let m=l.tick?.value??Number.NaN,h=l.scale,v=this.chart?.options?.scales,y=h,C=v?.x?.min??y.min;return this.nearlyEqual(m,C)?"rgba(0,0,0,0)":this.theme().contrastDimmer},lineWidth:1}},xSpeed:{type:"linear",position:"top",stack:"trends",beginAtZero:!1,bounds:"ticks",min:o,max:r,title:{display:!1},ticks:{count:5,align:"inner",autoSkip:!1,includeBounds:!0,stepSize:s,minRotation:0,maxRotation:0,callback:l=>{let m=this.xCenterSpeed??Number.NaN;if(this.nearlyEqual(l,m))return"";let v=this.chart?.options?.scales?.xSpeed?.max;if(typeof v=="number"&&this.nearlyEqual(l,v))return"";let y=this.xStepSpeed??Number.NaN,C=Number.isFinite(y)?y:1,S=Math.max(0,Math.min(3,Math.ceil(-Math.log10(C))));return`${l.toFixed(S)}`},font:l=>{let m=l.tick?.value??Number.NaN,h=this.xCenterSpeed??Number.NaN,v=this.nearlyEqual(m,h);return this.isPhonePortrait().matches?{size:11,weight:v?"bold":"normal"}:{size:20,weight:v?"bold":"normal"}},color:l=>{let m=l.tick?.value??Number.NaN,h=this.xCenterSpeed??Number.NaN;return this.nearlyEqual(m,h)?this.theme().contrast:void 0}},grid:{display:!0,color:l=>{let m=l.tick?.value??Number.NaN,h=l.scale,v=this.chart?.options?.scales,y=h,C=v?.xSpeed?.max??y.max;return this.nearlyEqual(m,C)?"rgba(0,0,0,0)":this.theme().contrastDimmer},lineWidth:1}}},this.lineChartOptions.plugins={title:{display:!0,align:"end",text:"TWD ",color:this.getThemeColors().chartLabel,padding:this.isPhonePortrait().matches?{top:3,bottom:0}:{top:3,bottom:0},font:this.isPhonePortrait().matches?{size:16,weight:"normal"}:{size:35,weight:"normal"}},subtitle:{display:!0,align:"start",text:" TWS",color:this.getThemeColors().chartLabel,padding:this.isPhonePortrait().matches?{top:-18,bottom:12}:{top:-41,bottom:12},font:this.isPhonePortrait().matches?{size:16}:{size:35}},legend:{display:!1},streaming:{duration:this.dataSourceInfo.maxDataPoints*this.dataSourceInfo.sampleTime,delay:this.dataSourceInfo.sampleTime,frameRate:this.datasetConfig.timeScaleFormat==="day"?5:this.datasetConfig.timeScaleFormat==="hour"?8:this.datasetConfig.timeScaleFormat==="minute"?15:30}},this.xCenter=(e+t)/2,this.xStep=i,this.xCenterSpeed=(o+r)/2,this.xStepSpeed=s}createDatasets(){this.lineChartData.datasets=[],this.lineChartData.datasets.push({label:"Value",data:[],order:2,parsing:!1,normalized:!0,tension:0,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:1,fill:!1,xAxisID:"x"},{label:"SMA",data:[],order:0,parsing:!1,normalized:!0,tension:.3,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:10,fill:!1,borderColor:e=>{let t=e.chart,{ctx:i}=t;return this.lineGradientForAxis(i,t,"x")},backgroundColor:"red",xAxisID:"x"},{label:"lastAverage",data:[],order:1,parsing:!1,normalized:!0,tension:0,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:0,borderColor:"",fill:!1,hidden:!0,xAxisID:"x"},{label:"lastMinimum",data:[],order:3,parsing:!1,normalized:!0,hidden:!0,xAxisID:"x"},{label:"lastMaximum",data:[],order:4,parsing:!1,normalized:!0,hidden:!0,xAxisID:"x"},{label:"Value Speed",data:[],order:2,parsing:!1,normalized:!0,tension:0,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:1,fill:!1,xAxisID:"xSpeed"},{label:"SMA Speed",data:[],order:0,parsing:!1,normalized:!0,tension:.2,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:3,fill:!1,borderColor:e=>{let t=e.chart,{ctx:i}=t;return this.lineGradientForAxis(i,t,"xSpeed")},xAxisID:"xSpeed"},{label:"lastAverage Speed",data:[],order:1,parsing:!1,normalized:!0,tension:0,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:0,borderColor:"",fill:!1,hidden:!0,xAxisID:"xSpeed"},{label:"lastMinimum Speed",data:[],order:3,parsing:!1,normalized:!0,hidden:!0,xAxisID:"xSpeed"},{label:"lastMaximum Speed",data:[],order:4,parsing:!1,normalized:!0,hidden:!0,xAxisID:"xSpeed"}),this.setDatasetsColors()}startStreaming(){this._dsDirectionSub?.unsubscribe(),this._dsSpeedSub?.unsubscribe();let e=this._dataset.getDatasetBatchThenLiveObservable(`${this.id()}-twd`),t=this._dataset.getDatasetBatchThenLiveObservable(`${this.id()}-tws`);this._dsDirectionSub=e?.subscribe(i=>{if(Array.isArray(i))this.pushRowsToDatasets(i);else if(this.pushRowsToDatasets([i]),this.chart.data.datasets[0].data.length>this.dataSourceInfo.maxDataPoints)for(let o=0;o<=4;o++)this.chart.data.datasets[o].data.shift();this.updateChartAfterDataChange(),this.ngZone.runOutsideAngular(()=>{this.chart?.update("none")})}),this._dsSpeedSub=t?.subscribe(i=>{if(Array.isArray(i))this.pushRowsToSpeedDatasets(i);else if(this.pushRowsToSpeedDatasets([i]),this.chart.data.datasets[5].data.length>this.dataSourceInfo.maxDataPoints)for(let o=5;o<=9;o++)this.chart.data.datasets[o].data.shift();this.updateChartAfterDataChange(),this.ngZone.runOutsideAngular(()=>{this.chart?.update("none")})})}unwrapAngles(e){if(e.length===0)return[];let t=[],i=null;for(let o of e){if(o==null){t.push(null);continue}if(i==null){t.push(o),i=o;continue}let r=o-i;r>180&&(r-=360),r<-180&&(r+=360),t.push(t[t.length-1]+r),i=o}return t}pushRowsToDatasets(e){this.pushRowsGeneric(e,0,"deg",!0)}pushRowsToSpeedDatasets(e){this.pushRowsGeneric(e,5,"knots",!1)}getRowValue(e,t){switch(t){case"value":return e.data.value??null;case"sma":return e.data.sma??null;case"ema":return e.data.ema??null;case"dema":return e.data.doubleEma??null;case"avg":return e.data.lastAverage??null;case"min":return e.data.lastMinimum??null;case"max":return e.data.lastMaximum??null;default:return null}}transformRows(e,t,i,o){let r=e.map(l=>{let m=this.getRowValue(l,t);return m==null?null:this.unitsService.convertToUnit(i,m)}),s=o?this.unwrapAngles(r):r;return e.map((l,m)=>({x:s[m],y:l.timestamp,ts:l.timestamp}))}pushRowsGeneric(e,t,i,o){["value","sma","avg","min","max"].forEach((s,l)=>{this.chart.data.datasets[t+l].data.push(...this.transformRows(e,s,i,o))})}normalizeAngle(e){return(e%360+360)%360}angularDiff(e,t){let i=(e-t+540)%360-180;return Math.abs(i)}niceStepFromMantissas(e,t){if(!isFinite(e)||e<=0)return 1;let i=Math.floor(Math.log10(e)),o=e/Math.pow(10,i);return(t.find(s=>o<=s)??t[t.length-1])*Math.pow(10,i)}updateChartAfterDataChange(){let e=this.chart.data.datasets[2]?.data,t=this.chart.data.datasets[1]?.data,i=this.chart.data.datasets[0]?.data,o=!!e?.length,r=!!t?.length,s=!!i?.length,l=o?e[e.length-1].x:r?t[t.length-1].x:s?i[i.length-1].x:void 0;if(typeof l=="number"&&isFinite(l)){let y=this.chart.data.datasets[3]?.data,C=this.chart.data.datasets[4]?.data,S=y?.length?y[y.length-1].x:void 0,_=C?.length?C[C.length-1].x:void 0,F=typeof S=="number"&&isFinite(S)?this.angularDiff(l,S):Number.NaN,E=typeof _=="number"&&isFinite(_)?this.angularDiff(l,_):Number.NaN,N=Number.isFinite(F)||Number.isFinite(E)?Math.max(Number.isFinite(F)?F:0,Number.isFinite(E)?E:0):Number.NaN;if(!Number.isFinite(N)){let se=o?e:r?t:i,de=Math.min(30,se?.length??0);if(de>1){let ue=se.slice(se.length-de).map(me=>me.x).filter(me=>typeof me=="number"&&isFinite(me));ue.length&&(N=ue.reduce((me,Se)=>Math.max(me,this.angularDiff(l,Se)),0))}}N=Math.max(N||0,15);let j=2*N/4,B=this.niceStepFromMantissas(j,[1,1.5,2,2.5,5,7.5,10]),re=l-2*B,pe=l+2*B;this.chart.options.scales.x.min=re,this.chart.options.scales.x.max=pe;let te=this.chart.options.scales;te.x.ticks=ge(Z({},te.x.ticks??{}),{stepSize:B}),this.xCenter=l,this.xStep=B}let m=this.chart.data.datasets[7]?.data;if(m&&m.length){let y=m.length-1,C=m[y]?.x??0,S=this.chart.data.datasets[8].data[y]?.x??C,_=this.chart.data.datasets[9].data[y]?.x??C,F=Math.abs(C-S),E=Math.abs(_-C),N=Math.max(F,E);N=Math.max(N,.5);let j=2*N/4,B=this.niceStepFromMantissas(j,[1,2,2.5,5,10]),re=C-2*B,pe=C+2*B,te=this.chart.options.scales;te.xSpeed.min=re,te.xSpeed.max=pe,te.xSpeed.ticks=ge(Z({},te.xSpeed.ticks??{}),{stepSize:B}),this.xCenterSpeed=C,this.xStepSpeed=B}let h=this.getWindowMs(this.datasetConfig?.timeScaleFormat);if(this.chart.data.datasets[0].data.length>0){let y=Date.now();this.chart.data.datasets.forEach(E=>{E.data.forEach(N=>{let U=N.ts??N.y;N.y=Math.max(0,Math.min(h,y-U))})}),this.chart.options.scales.y.min=0,this.chart.options.scales.y.max=h;let C;switch(this.datasetConfig?.timeScaleFormat){case"Last Minute":C=15e3;break;case"Last 5 Minutes":C=6e4;break;case"Last 30 Minutes":C=5*6e4;break;default:C=h/5;break}let _=this.chart.options.scales,F=Z({},_.y.ticks??{});delete F.count,F.stepSize=C,_.y.ticks=F}}getWindowMs(e){switch(e){case"Last 30 Minutes":return 30*6e4;case"Last 5 Minutes":return 5*6e4;case"Last Minute":return 6e4;default:return 6e4}}lineGradientForAxis(e,t,i){let o=t.chartArea;if(!o)return null;let r=t.scales?.[i];if(!r)return null;let s=t.options?.scales,l=r,m=s?.[i]?.min??l.min,h=s?.[i]?.max??l.max;if(typeof m!="number"||typeof h!="number"||!isFinite(m)||!isFinite(h))return null;let v=(m+h)/2,y=r.getPixelForValue(v),C=Math.max(0,Math.min(1,(y-o.left)/o.width)),S=e.createLinearGradient(o.left,0,o.right,0);return S.addColorStop(0,this.theme().port),S.addColorStop(C,this.theme().port),S.addColorStop(C,this.theme().starboard),S.addColorStop(1,this.theme().starboard),S}setDatasetsColors(){this.lineChartData.datasets.forEach(e=>{e.label==="Value"&&(e.borderColor=this.getThemeColors().valueLine,e.backgroundColor=this.getThemeColors().valueFill),e.label==="Value Speed"&&(e.borderColor=this.getThemeColors().valueLine,e.backgroundColor=this.getThemeColors().valueFill)})}getThemeColors(){let e=this.runtime?.options()?.color,t={valueLine:null,valueFill:null,averageLine:null,averageFill:null,averageChartLine:null,chartLabel:null,chartValue:null};switch(e){case"contrast":t.valueLine=this.theme().contrastDim,t.valueFill=this.theme().contrastDimmer,t.averageLine=this.theme().contrast,t.averageFill=this.theme().contrast,t.chartValue=this.theme().contrast,t.averageChartLine=this.theme().contrast,t.chartLabel=this.theme().contrastDim;break;case"blue":t.valueLine=this.theme().blueDim,t.valueFill=this.theme().blueDimmer,t.averageLine=this.theme().blue,t.averageFill=this.theme().blue,t.chartValue=this.theme().blue,t.averageChartLine=this.theme().blueDim,t.chartLabel=this.theme().blueDim;break;case"green":t.valueLine=this.theme().greenDim,t.valueFill=this.theme().greenDimmer,t.averageLine=this.theme().green,t.averageFill=this.theme().green,t.chartValue=this.theme().green,t.averageChartLine=this.theme().greenDim,t.chartLabel=this.theme().greenDim;break;case"pink":t.valueLine=this.theme().pinkDim,t.valueFill=this.theme().pinkDimmer,t.averageLine=this.theme().pink,t.averageFill=this.theme().pink,t.chartValue=this.theme().pink,t.averageChartLine=this.theme().pinkDim,t.chartLabel=this.theme().pinkDim;break;case"orange":t.valueLine=this.theme().orangeDim,t.valueFill=this.theme().orangeDimmer,t.averageLine=this.theme().orange,t.averageFill=this.theme().orange,t.chartValue=this.theme().orange,t.averageChartLine=this.theme().orangeDim,t.chartLabel=this.theme().orangeDim;break;case"purple":t.valueLine=this.theme().purpleDim,t.valueFill=this.theme().purpleDimmer,t.averageLine=this.theme().purple,t.averageFill=this.theme().purple,t.chartValue=this.theme().purple,t.averageChartLine=this.theme().purpleDim,t.chartLabel=this.theme().purpleDim;break;case"grey":t.valueLine=this.theme().greyDim,t.valueFill=this.theme().greyDimmer,t.averageLine=this.theme().grey,t.averageFill=this.theme().grey,t.chartValue=this.theme().grey,t.averageChartLine=this.theme().greyDim,t.chartLabel=this.theme().greyDim;break;case"yellow":t.valueLine=this.theme().yellowDim,t.valueFill=this.theme().yellowDimmer,t.averageLine=this.theme().yellow,t.averageFill=this.theme().yellow,t.chartValue=this.theme().yellow,t.averageChartLine=this.theme().yellowDim,t.chartLabel=this.theme().yellowDim;break}return t}nearlyEqual(e,t,i=1e-6){if(!Number.isFinite(e)||!Number.isFinite(t))return!1;let o=Math.max(1,Math.max(Math.abs(e),Math.abs(t)));return Math.abs(e-t)<=i*o}resolveTickColor(e,t,i){let r=t.options.ticks?.color;return typeof r=="function"?r({chart:e,scale:t,tick:{value:i}})??Dt.defaults.color:typeof r=="string"?r:Dt.defaults.color}axisTopLabelY(e){return e.options?.position==="top"?e.top+4:e.bottom+2}ngOnDestroy(){this._dsDirectionSub?.unsubscribe(),this._dsSpeedSub?.unsubscribe(),this.chart?.destroy();let e=this.widgetDataChart?.()?.nativeElement;this.canvasService.releaseCanvas(e,{clear:!0,removeFromDom:!0})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-windtrends-chart"]],viewQuery:function(t,i){t&1&&_e(i.widgetDataChart,ky,5,nt),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:0,consts:[["widgetDataChart",""],[2,"z-index","inherit"]],template:function(t,i){t&1&&ee(0,"canvas",1,0)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}"],changeDetection:0})}return n})();function ai(n,a,e,t=1e3,i,o,r=[500,500],s){if(o){let S=o.get(n);S&&cancelAnimationFrame(S)}a=(()=>{let S=n.getAttribute("transform");if(S){let _=/rotate\((-?\d+(\.\d+)?)/.exec(S);if(_)return parseFloat(_[1])}return a})();let m=S=>(S+360)%360;a=m(a),e=m(e);let h=e-a;h>180&&(h-=360),h<-180&&(h+=360);let v=S=>S<.5?4*S*S*S:1-Math.pow(-2*S+2,3)/2,y=S=>s?s.runOutsideAngular(S):S(),C=S=>s?s.run(S):S();y(()=>{let S=performance.now(),_=E=>{let N=E-S,U=Math.min(N/t,1),j=v(U),B=a+h*j;if(n.setAttribute("transform",`rotate(${B} ${r[0]} ${r[1]})`),U<1){let re=requestAnimationFrame(_);o&&o.set(n,re)}else n.setAttribute("transform",`rotate(${e} ${r[0]} ${r[1]})`),i&&C(i),o&&o.delete(n)},F=requestAnimationFrame(_);o&&o.set(n,F)})}function hr(n,a,e,t=500,i,o,r){if(o){let m=o.get(n);m&&cancelAnimationFrame(m)}let s=m=>r?r.runOutsideAngular(m):m(),l=m=>r?r.run(m):m();s(()=>{let m=performance.now(),h=e-a,v=S=>S<.5?4*S*S*S:1-Math.pow(-2*S+2,3)/2,y=S=>{let _=S-m,F=Math.min(_/t,1),E=v(F),N=a+h*E;if(n.setAttribute("width",N.toString()),F<1){let U=requestAnimationFrame(y);o&&o.set(n,U)}else n.setAttribute("width",e.toString()),i&&l(i),o&&o.delete(n)},C=requestAnimationFrame(y);o&&o.set(n,C)})}var Jm=n=>n<.5?4*n*n*n:1-Math.pow(-2*n+2,3)/2,Vs=n=>(n%360+360)%360,Dy=(n,a)=>{let e=Vs(a)-Vs(n);return e>180&&(e-=360),e<=-180&&(e+=360),e};function Ls(n,a,e,t,i,o){let r=m=>o?o.runOutsideAngular(m):m(),s=m=>o?o.run(m):m(),l=0;return r(()=>{let m=performance.now(),h=Dy(n,a),v=Vs(n),y=C=>{let S=Math.min((C-m)/e,1),_=Jm(S),F=v+h*_;t(Vs(F)),S<1?l=requestAnimationFrame(y):i&&s(i)};l=requestAnimationFrame(y)}),l}var Ey=(n,a,e)=>({min:n.min+(a.min-n.min)*e,mid:n.mid+(a.mid-n.mid)*e,max:n.max+(a.max-n.max)*e});function Ws(n,a,e,t,i,o){let r=m=>o?o.runOutsideAngular(m):m(),s=m=>o?o.run(m):m(),l=0;return r(()=>{let m=performance.now(),h=v=>{let y=Math.min((v-m)/e,1),C=Jm(y);t(Ey(n,a,C)),y<1?l=requestAnimationFrame(h):i&&s(i)};l=requestAnimationFrame(h)}),l}var Iy=["rotatingDial"],Py=["awaIndicator"],Ry=["twaIndicator"],Ny=["wptIndicator"],Oy=["setIndicator"],Vy=["cogIndicator"];function Ly(n,a){n&1&&(oe(),D(0,"g",69)(1,"text",100)(2,"tspan",101),c(3,"330"),G()(),D(4,"text",102)(5,"tspan",103),c(6,"300"),G()(),D(7,"text",104)(8,"tspan",105),c(9,"W"),G()(),D(10,"text",106)(11,"tspan",107),c(12,"240"),G()(),D(13,"text",108)(14,"tspan",109),c(15,"210"),G()(),D(16,"text",110)(17,"tspan",111),c(18,"S"),G()(),D(19,"text",112)(20,"tspan",113),c(21,"150"),G()(),D(22,"text",114)(23,"tspan",115),c(24,"120"),G()(),D(25,"text",116)(26,"tspan",117),c(27,"E"),G()(),D(28,"text",118)(29,"tspan",119),c(30,"60"),G()(),D(31,"text",120)(32,"tspan",121),c(33,"30"),G()(),D(34,"text",122)(35,"tspan",123),c(36,"N"),G()()())}function Wy(n,a){n&1&&(oe(),D(0,"g",70)(1,"text",100)(2,"tspan",101),c(3,"30"),G()(),D(4,"text",102)(5,"tspan",103),c(6,"60"),G()(),D(7,"text",104)(8,"tspan",105),c(9,"90"),G()(),D(10,"text",106)(11,"tspan",107),c(12,"120"),G()(),D(13,"text",108)(14,"tspan",109),c(15,"150"),G()(),D(16,"text",110)(17,"tspan",111),c(18,"180"),G()(),D(19,"text",112)(20,"tspan",113),c(21,"150"),G()(),D(22,"text",114)(23,"tspan",115),c(24,"120"),G()(),D(25,"text",116)(26,"tspan",117),c(27,"90"),G()(),D(28,"text",118)(29,"tspan",119),c(30,"60"),G()(),D(31,"text",120)(32,"tspan",121),c(33,"30"),G()(),D(34,"text",122)(35,"tspan",123),c(36,"0"),G()()())}var eh=([n,a],[e,t],[i,o])=>(Math.atan2(o-t,i-e)-Math.atan2(a-t,n-e)+3*Math.PI)%(2*Math.PI)-Math.PI,th=(()=>{class n{rotatingDial=he.required("rotatingDial");awaIndicator=he.required("awaIndicator");twaIndicator=he.required("twaIndicator");wptIndicator=he.required("wptIndicator");setIndicator=he.required("setIndicator");cogIndicator=he.required("cogIndicator");compassHeading=x.required();compassModeEnabled=x.required();courseOverGroundAngle=x(void 0);courseOverGroundEnabled=x.required();trueWindAngle=x.required();twsEnabled=x.required();twaEnabled=x.required();trueWindSpeed=x.required();trueWindSpeedUnit=x.required();appWindAngle=x.required();awsEnabled=x.required();appWindSpeed=x.required();appWindSpeedUnit=x.required();laylineAngle=x(void 0);closeHauledLineEnabled=x.required();sailSetupEnabled=x.required();windSectorEnabled=x.required();driftEnabled=x.required();driftSet=x(void 0);driftFlow=x(void 0);waypointAngle=x(void 0);waypointEnabled=x.required();trueWindMinHistoric=x(void 0);trueWindMidHistoric=x(void 0);trueWindMaxHistoric=x(void 0);compass={oldValue:0,newValue:0};twa={oldValue:0,newValue:0};awa={oldValue:0,newValue:0};wpt={oldValue:0,newValue:0};cog={oldValue:0,newValue:0};set={oldValue:0,newValue:0};compassInitialized=!1;twaInitialized=!1;awaInitialized=!1;wptInitialized=!1;cogInitialized=!1;setInitialized=!1;headingValue=w("--");trueWindHeading=0;waypointActive=w(!1);portLaylinePrev=0;stbdLaylinePrev=0;portLaylineAnimId=null;stbdLaylineAnimId=null;closeHauledLinePortPath=w("M 500,500 500,500");closeHauledLineStbdPath=w("M 500,500 500,500");portSectorPrev={min:0,mid:0,max:0};stbdSectorPrev={min:0,mid:0,max:0};portSectorAnimId=null;stbdSectorAnimId=null;portWindSectorPath=w("");stbdWindSectorPath=w("");animationFrameIds=new WeakMap;CENTER=500;RADIUS=350;ANIMATION_DURATION=900;EPS_ANGLE=1;ngZone=A(Je);setRotationImmediate(e,t){e.setAttribute("transform",`rotate(${t} 500 500)`)}constructor(){W(()=>{let e=this.waypointEnabled();z(()=>{this.waypointActive.set(e)})}),W(()=>{let e=this.compassModeEnabled(),t=this.compassHeading(),i=Number.isFinite(t)?Math.round(t):null;i!=null&&z(()=>{let o=e?i:0,r=!this.compassInitialized;r?(this.compass.oldValue=o,this.compass.newValue=o,this.compassInitialized=!0):(this.compass.oldValue=this.compass.newValue,this.compass.newValue=o),this.headingValue.set(i.toString()),this.rotatingDial()?.nativeElement&&(r||this.compass.oldValue===this.compass.newValue?this.setRotationImmediate(this.rotatingDial().nativeElement,-this.compass.newValue):ai(this.rotatingDial().nativeElement,-this.compass.oldValue,-this.compass.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,void 0,this.ngZone),this.updateCloseHauledLines(!1),this.updateWindSectors(!1))})}),W(()=>{let e=this.courseOverGroundAngle(),t=Number.isFinite(e)?Math.round(e):null,i=this.compassModeEnabled();t!=null&&z(()=>{let o=i?this.compass.newValue:0,r=t-o,s=!this.cogInitialized;s?(this.cog.oldValue=r,this.cog.newValue=r,this.cogInitialized=!0):(this.cog.oldValue=this.cog.newValue,this.cog.newValue=r),this.cogIndicator()?.nativeElement&&(s||this.cog.oldValue===this.cog.newValue?this.setRotationImmediate(this.cogIndicator().nativeElement,this.cog.newValue):ai(this.cogIndicator().nativeElement,this.cog.oldValue,this.cog.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,void 0,this.ngZone))})}),W(()=>{let e=this.waypointAngle();z(()=>{if(e==null||!Number.isFinite(e)){this.waypointActive.set(!1);return}this.waypointEnabled()?this.waypointActive.set(!0):this.waypointActive.set(!1);let t=!this.wptInitialized;t?(this.wpt.oldValue=e,this.wpt.newValue=e,this.wptInitialized=!0):(this.wpt.oldValue=this.wpt.newValue,this.wpt.newValue=e),this.wptIndicator()?.nativeElement&&(t||this.wpt.oldValue===this.wpt.newValue?this.setRotationImmediate(this.wptIndicator().nativeElement,this.wpt.newValue):ai(this.wptIndicator().nativeElement,this.wpt.oldValue,this.wpt.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,void 0,this.ngZone))})}),W(()=>{let e=this.appWindAngle(),t=Number.isFinite(e)?Math.round(e):null;t!=null&&z(()=>{let i=!this.awaInitialized;i?(this.awa.oldValue=t,this.awa.newValue=t,this.awaInitialized=!0):(this.awa.oldValue=this.awa.newValue,this.awa.newValue=t),this.awaIndicator()?.nativeElement&&(i||this.awa.oldValue===this.awa.newValue?this.setRotationImmediate(this.awaIndicator().nativeElement,this.awa.newValue):ai(this.awaIndicator().nativeElement,this.awa.oldValue,this.awa.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,void 0,this.ngZone)),this.updateCloseHauledLines(!i)})}),W(()=>{let e=this.trueWindAngle(),t=Number.isFinite(e)?Math.round(e):null,i=this.compassModeEnabled();t!=null&&z(()=>{this.trueWindHeading=t;let o=i?this.compass.newValue*-1:0,r=this.addHeading(this.trueWindHeading,o);this.twaInitialized?(this.twa.oldValue=this.twa.newValue,this.twa.newValue=r):(this.twa.oldValue=r,this.twa.newValue=r,this.twaInitialized=!0),this.twaIndicator()?.nativeElement&&(!this.twaInitialized||this.twa.oldValue===this.twa.newValue?this.setRotationImmediate(this.twaIndicator().nativeElement,this.twa.newValue):ai(this.twaIndicator().nativeElement,this.twa.oldValue,this.twa.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,void 0,this.ngZone))})}),W(()=>{this.laylineAngle(),this.closeHauledLineEnabled()&&z(()=>this.updateCloseHauledLines())}),W(()=>{let e=this.driftSet(),t=Number.isFinite(e)?Math.round(e):null;t!=null&&z(()=>{this.setInitialized?(this.set.oldValue=this.set.newValue,this.set.newValue=t):(this.set.oldValue=t,this.set.newValue=t,this.setInitialized=!0),this.setIndicator()?.nativeElement&&(!this.setInitialized||this.set.oldValue===this.set.newValue?this.setRotationImmediate(this.setIndicator().nativeElement,this.set.newValue):ai(this.setIndicator().nativeElement,this.set.oldValue,this.set.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,void 0,this.ngZone))})}),W(()=>{let e=this.windSectorEnabled();this.trueWindMinHistoric(),this.trueWindMidHistoric(),this.trueWindMaxHistoric(),this.laylineAngle(),z(()=>{if(!e){this.portSectorAnimId&&cancelAnimationFrame(this.portSectorAnimId),this.stbdSectorAnimId&&cancelAnimationFrame(this.stbdSectorAnimId),this.portSectorAnimId=null,this.stbdSectorAnimId=null,this.portWindSectorPath.set(""),this.stbdWindSectorPath.set("");return}this.updateWindSectors(!0)})})}updateCloseHauledLines(e=!0){if(!this.closeHauledLineEnabled())return;let t=this.compassModeEnabled(),i=t&&Number(this.compass.newValue)||0,o=t&&Number(this.awa.newValue)||0,r=Number(this.laylineAngle())||0,s=t?this.addHeading(i,this.addHeading(o,r*-1)):this.addHeading(o,r*-1);this.animateLayline(this.portLaylinePrev,s,!0,e),this.portLaylinePrev=s;let l=t?this.addHeading(i,this.addHeading(o,r)):this.addHeading(o,r);this.animateLayline(this.stbdLaylinePrev,l,!1,e),this.stbdLaylinePrev=l}animateLayline(e,t,i,o=!0){if(i&&this.portLaylineAnimId&&cancelAnimationFrame(this.portLaylineAnimId),!i&&this.stbdLaylineAnimId&&cancelAnimationFrame(this.stbdLaylineAnimId),this.angleDelta(e,t)<this.EPS_ANGLE){this.drawLayline(t,i),i?this.portLaylineAnimId=null:this.stbdLaylineAnimId=null;return}if(!o){this.drawLayline(t,i),i?this.portLaylineAnimId=null:this.stbdLaylineAnimId=null;return}let r=Ls(e,t,this.ANIMATION_DURATION,s=>this.drawLayline(s,i),()=>{i?this.portLaylineAnimId=null:this.stbdLaylineAnimId=null},this.ngZone);i?this.portLaylineAnimId=r:this.stbdLaylineAnimId=r}drawLayline(e,t){let i=e*Math.PI/180,o=Math.floor(this.RADIUS*Math.sin(i)+this.CENTER),r=Math.floor(this.RADIUS*Math.cos(i)*-1+this.CENTER);t?this.closeHauledLinePortPath.set(`M ${this.CENTER},${this.CENTER} L ${o},${r}`):this.closeHauledLineStbdPath.set(`M ${this.CENTER},${this.CENTER} L ${o},${r}`)}windSectorsInitialized=!1;updateWindSectors(e=!0){if(!this.windSectorEnabled()||this.trueWindMinHistoric()==null||this.trueWindMidHistoric()==null||this.trueWindMaxHistoric()==null)return;let t={min:this.trueWindMinHistoric(),mid:this.trueWindMidHistoric(),max:this.trueWindMaxHistoric()},i={min:this.trueWindMinHistoric(),mid:this.trueWindMidHistoric(),max:this.trueWindMaxHistoric()};if(!this.windSectorsInitialized){this.windSectorsInitialized=!0,e?(this.animateWindSector(t,t,!0),this.animateWindSector(i,i,!1)):(this.portWindSectorPath.set(this.computeSectorPath(t,!0)),this.stbdWindSectorPath.set(this.computeSectorPath(i,!1))),this.portSectorPrev=t,this.stbdSectorPrev=i;return}e?this.angleDelta(this.portSectorPrev.min,t.min)<this.EPS_ANGLE&&this.angleDelta(this.portSectorPrev.mid,t.mid)<this.EPS_ANGLE&&this.angleDelta(this.portSectorPrev.max,t.max)<this.EPS_ANGLE?(this.portWindSectorPath.set(this.computeSectorPath(t,!0)),this.stbdWindSectorPath.set(this.computeSectorPath(i,!1))):(this.animateWindSector(this.portSectorPrev,t,!0),this.animateWindSector(this.stbdSectorPrev,i,!1)):(this.portWindSectorPath.set(this.computeSectorPath(t,!0)),this.stbdWindSectorPath.set(this.computeSectorPath(i,!1))),this.portSectorPrev=t,this.stbdSectorPrev=i}animateWindSector(e,t,i){if(i&&this.portSectorAnimId&&cancelAnimationFrame(this.portSectorAnimId),!i&&this.stbdSectorAnimId&&cancelAnimationFrame(this.stbdSectorAnimId),this.angleDelta(e.min,t.min)<this.EPS_ANGLE&&this.angleDelta(e.mid,t.mid)<this.EPS_ANGLE&&this.angleDelta(e.max,t.max)<this.EPS_ANGLE){let s=this.computeSectorPath(t,i);i?this.portWindSectorPath.set(s):this.stbdWindSectorPath.set(s),i?this.portSectorAnimId=null:this.stbdSectorAnimId=null;return}let r=Ws(e,t,this.ANIMATION_DURATION,s=>{let l=this.computeSectorPath(s,i);i?this.portWindSectorPath.set(l):this.stbdWindSectorPath.set(l)},()=>{i?this.portSectorAnimId=null:this.stbdSectorAnimId=null},this.ngZone);i?this.portSectorAnimId=r:this.stbdSectorAnimId=r}addHeading(e=0,t=0){let i=(e+t)%360;return i<0&&(i+=360),i}ngOnDestroy(){this.portLaylineAnimId&&cancelAnimationFrame(this.portLaylineAnimId),this.stbdLaylineAnimId&&cancelAnimationFrame(this.stbdLaylineAnimId),this.portLaylineAnimId=null,this.stbdLaylineAnimId=null,this.portSectorAnimId&&cancelAnimationFrame(this.portSectorAnimId),this.stbdSectorAnimId&&cancelAnimationFrame(this.stbdSectorAnimId),this.portSectorAnimId=null,this.stbdSectorAnimId=null;let e=[this.rotatingDial(),this.awaIndicator(),this.twaIndicator(),this.wptIndicator(),this.setIndicator(),this.cogIndicator()];for(let t of e){let i=t?.nativeElement;if(!i)continue;let o=this.animationFrameIds.get(i);o&&cancelAnimationFrame(o),this.animationFrameIds.delete(i)}}angleDelta(e,t){let i=(t-e+540)%360-180;return Math.abs(i)}computeSectorPath(e,t){let o=(Number(this.laylineAngle())||0)*(t?-1:1),r=this.compassModeEnabled(),s=r&&Number(this.compass.newValue)||0,l=Number(this.awa.newValue)||0,m=r?this.addHeading(s,this.addHeading(e.min,o)):this.addHeading(o,this.addHeading(e.min,l*-1)),h=r?this.addHeading(s,this.addHeading(e.mid,o)):this.addHeading(o,this.addHeading(e.mid,l*-1)),v=r?this.addHeading(s,this.addHeading(e.max,o)):this.addHeading(o,this.addHeading(e.max,l*-1)),y=this.RADIUS*Math.sin(m*Math.PI/180)+this.CENTER,C=this.RADIUS*Math.cos(m*Math.PI/180)*-1+this.CENTER,S=this.RADIUS*Math.sin(h*Math.PI/180)+this.CENTER,_=this.RADIUS*Math.cos(h*Math.PI/180)*-1+this.CENTER,F=this.RADIUS*Math.sin(v*Math.PI/180)+this.CENTER,E=this.RADIUS*Math.cos(v*Math.PI/180)*-1+this.CENTER,N=Math.abs(eh([y,C],[S,_],[F,E]))>Math.PI/2?0:1,U=eh([F,E],[y,C],[S,_])>0?0:1;return`M ${this.CENTER},${this.CENTER} L ${y},${C} A ${this.RADIUS},${this.RADIUS} 0 ${N} ${U} ${F},${E} z`}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["svg-windsteer"]],viewQuery:function(t,i){t&1&&_e(i.rotatingDial,Iy,5)(i.awaIndicator,Py,5)(i.twaIndicator,Ry,5)(i.wptIndicator,Ny,5)(i.setIndicator,Oy,5)(i.cogIndicator,Vy,5),t&2&&Me(6)},inputs:{compassHeading:[1,"compassHeading"],compassModeEnabled:[1,"compassModeEnabled"],courseOverGroundAngle:[1,"courseOverGroundAngle"],courseOverGroundEnabled:[1,"courseOverGroundEnabled"],trueWindAngle:[1,"trueWindAngle"],twsEnabled:[1,"twsEnabled"],twaEnabled:[1,"twaEnabled"],trueWindSpeed:[1,"trueWindSpeed"],trueWindSpeedUnit:[1,"trueWindSpeedUnit"],appWindAngle:[1,"appWindAngle"],awsEnabled:[1,"awsEnabled"],appWindSpeed:[1,"appWindSpeed"],appWindSpeedUnit:[1,"appWindSpeedUnit"],laylineAngle:[1,"laylineAngle"],closeHauledLineEnabled:[1,"closeHauledLineEnabled"],sailSetupEnabled:[1,"sailSetupEnabled"],windSectorEnabled:[1,"windSectorEnabled"],driftEnabled:[1,"driftEnabled"],driftSet:[1,"driftSet"],driftFlow:[1,"driftFlow"],waypointAngle:[1,"waypointAngle"],waypointEnabled:[1,"waypointEnabled"],trueWindMinHistoric:[1,"trueWindMinHistoric"],trueWindMidHistoric:[1,"trueWindMidHistoric"],trueWindMaxHistoric:[1,"trueWindMaxHistoric"]},decls:124,vars:44,consts:[["rotatingDial",""],["wptIndicator",""],["setIndicator",""],["cogIndicator",""],["awaIndicator",""],["twaIndicator",""],["viewBox","0 0 1000 1000"],["id","defs1"],["id","linearGradient18"],["offset","0",1,"boat",2,"stop-opacity","0.71372495"],["offset","1",1,"boat",2,"stop-opacity","0"],["id","linearGradient16"],["id","linearGradient13"],["offset","0.41176471",1,"drift-arrow",2,"stop-opacity","1"],["offset","1",1,"drift-arrow",2,"stop-opacity","0"],["id","swatch4"],["offset","0","id","stop4",2,"stop-color","#000000","stop-opacity","1"],["clipPathUnits","userSpaceOnUse","id","clipPath16"],["id","ellipse16","cx","311.24539","cy","-1516.3778","rx","194.27342","ry","181.83022",2,"display","inline","fill","#9a9300","fill-opacity","1","stroke","none","stroke-width","55","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],[0,"xlink","href","#linearGradient13","id","linearGradient14","x1","453.48047","y1","583.62891","x2","638.11328","y2","583.62891","gradientUnits","userSpaceOnUse","gradientTransform","matrix(0.00723393,1.2388183,-1.0538241,0.00615367,1111.2051,-179.73465)"],[0,"xlink","href","#linearGradient16","id","linearGradient17","x1","-502.04896","y1","439.35551","x2","-316","y2","439.35551","gradientUnits","userSpaceOnUse","gradientTransform","translate(0,49.000266)"],[0,"xlink","href","#linearGradient18","id","linearGradient19","x1","495.83999","y1","439.35551","x2","681.88895","y2","439.35551","gradientUnits","userSpaceOnUse","gradientTransform","translate(0,49.000266)"],["id","layerBackground",2,"display","inline"],["id","boat",2,"display","inline"],["id","portSide","d","M 498.75049,208.89453 A 267.09439,554.67401 0 0 1 678.45974,767.81661",2,"fill","none","fill-opacity","1","stroke","url(#linearGradient19)","stroke-width","5.821","stroke-linecap","round","stroke-miterlimit","0","stroke-dasharray","none"],["id","starboardSide","d","m -499.13846,208.89453 a 267.09439,554.67401 0 0 1 179.70925,558.92208","transform","scale(-1,1)",2,"fill","none","fill-opacity","1","stroke","url(#linearGradient17)","stroke-width","5.821","stroke-linecap","round","stroke-miterlimit","0","stroke-dasharray","none"],["id","layerCompass"],["id","fixedDial"],["id","portStarboardBackground","d","M 499.99997,10.520805 A 489.47916,489.47916 0 0 0 10.520805,499.99997 489.47916,489.47916 0 0 0 499.99997,989.47913 489.47916,489.47916 0 0 0 989.47913,499.99997 489.47916,489.47916 0 0 0 499.99997,10.520805 Z m 0,132.291665 a 357.1875,357.1875 0 0 1 357.18749,357.1875 357.1875,357.1875 0 0 1 -357.18749,357.18749 357.1875,357.1875 0 0 1 -357.1875,-357.18749 357.1875,357.1875 0 0 1 357.1875,-357.1875 z",1,"fixed-dial-background",2,"display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","port","d","M 93.283801,265.18231 A 469.63541,469.63541 0 0 1 339.37522,58.687079",1,"port",2,"display","inline","fill","none","stroke-width","39.6875","stroke-linecap","butt","stroke-linejoin","round","stroke-miterlimit","0"],["id","starboard","d","M 660.62476,58.687069 A 469.63541,469.63541 0 0 1 906.71619,265.18228",1,"starboard",2,"display","inline","fill","none","stroke-width","39.6875","stroke-linecap","butt","stroke-linejoin","round","stroke-miterlimit","0"],["id","barsAndText",1,"contrast-stroke",2,"display","inline"],["d","m 416.35095,19.837399 2.78142,15.77426","id","path199",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 334.23173,41.658798 5.47834,15.051615","id","path200",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 260.27336,81.806174 12.55151,21.739856","id","path37",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 187.44581,126.00035 10.29591,12.2702","id","path197",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 127.23918,185.95785 12.27019,10.29591","id","path198",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 83.252815,257.66724 21.739865,12.55151","id","path166",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 42.289518,332.39273 15.05162,5.47835","id","path195",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 20.127799,414.42077 15.774251,2.78142","id","path196",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 17.879075,498.47765 H 42.982096","id","path167",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 19.776759,583.71187 15.77426,-2.78142","id","path193",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 41.598167,665.8311 15.051615,-5.47834","id","path194",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 81.668963,739.71246 103.40883,727.16095","id","path168",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 125.93981,812.61701 12.2702,-10.29591","id","path191",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 185.89732,872.82365 10.29591,-12.27019","id","path192",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 257.53004,916.73298 12.55151,-21.73985","id","path169",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 332.33219,957.7732 5.47835,-15.05162","id","path189",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 414.36024,979.93493 2.78142,-15.77425","id","path190",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 498.34046,982.10672 V 957.0037","id","path170",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 583.65133,980.28596 580.86991,964.5117","id","path187",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 665.77057,958.46456 -5.47834,-15.05161","id","path188",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 739.57526,918.31683 727.02375,896.57698","id","path171",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 812.55647,874.12301 802.26056,861.85282","id","path185",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 872.76312,814.16551 860.49293,803.8696","id","path186",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 916.59579,742.45577 894.85593,729.90426","id","path172",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 957.71266,667.73063 -15.05161,-5.47834","id","path183",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 979.8744,585.70259 -15.77425,-2.78142","id","path184",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 981.96954,501.64535 -25.10304,10e-6","id","path173",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 980.22542,416.41149 -15.77425,2.78143","id","path181",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 958.40403,334.29226 -15.05161,5.47834","id","path182",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 918.17964,260.41055 -21.73986,12.55151","id","path174",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 874.06247,187.50636 -12.27018,10.29591","id","path180",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 817.34594,130.05494 -10.40259,12.17987","id","path179",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 742.31857,83.390025 729.76706,105.12988","id","path175",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 667.6701,42.350172 -5.47834,15.051615","id","path178",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 585.64206,20.188432 -2.78142,15.77425","id","path176",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 501.50816,18.016286 V 43.119307","id","path177",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["cx","500","cy","500","r","404",1,"rotating-dial-Backplate"],["id","dialLabelsCompass"],["id","dialLabelsPortStbd"],["id","LayerLayline"],["id","PortLayline",1,"laylines",2,"fill","none","stroke-width","5","stroke-dasharray","40, 20","stroke-dashoffset","0","stroke-opacity","0.6"],["id","StbdLayline",1,"laylines",2,"fill","none","stroke-width","5","stroke-dasharray","40, 20","stroke-dashoffset","0","stroke-opacity","0.6"],["id","LayerWindShift"],["id","portSectorShift",1,"wind-sector-port",2,"fill-opacity","0.5","stroke","none"],["id","StbdSectorShift",1,"wind-sector-stbd",2,"fill-opacity","0.5","stroke","none"],["clip-path","url(#clipPath16)","d","m 416.36313,-1521.3937 c 371.15015,24.6522 731.95257,192.9774 983.98757,467.456 227.2972,244.24389 363.1732,572.3808 369.4045,906.42978 15.9331,499.10271 -269.2071,986.17861 -700.5178,1232.88522 -485.08308,290.4843 -1134.555606,269.7346 -1599.2788,-52.7169 -404.5062,-269.24461 -653.2224,-759.35388 -614.1746,-1245.84043 30.2148,-487.61814 344.18931,-937.89997 780.52695,-1152.15867 176.96718,-89.2092 371.8823084,-142.3103 569.54914,-156.0363","transform","matrix(0.28310615,0,0,0.32000828,411.88452,661.64815)",1,"next-waypoint-bar",2,"display","inline","fill","none","stroke-width","30","stroke-miterlimit","0"],["id","path6341","cx","500","cy","175.00002","rx","17.361122","ry","17.361118",1,"next-waypoint",2,"display","inline","fill","none","stroke-width","15.2778","stroke-dasharray","none"],["id","setArrow","d","m 563.93337,480.60403 -64.4901,-94.9673 -63.37665,95.71396 58.48691,-30.71299 0.77713,133.08346 c 0.0992,16.99331 2.52916,30.65913 5.44822,30.64209 2.91911,-0.0171 5.18926,-13.71032 5.09001,-30.70362 l -0.77782,-133.20444 z",2,"fill","url(#linearGradient14)","stroke","none","stroke-width","1.18648"],["id","layerCounter"],["id","twsCounter"],[0,"xml","space","preserve","x","904.27722","y","150.88913","id","text43",1,"true-wind-label",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","34.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","14.5521","stroke-miterlimit","0"],[0,"xml","space","preserve","x","903.84814","y","114.73512","id","text42",1,"true-wind",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","66.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","14.5521","stroke-miterlimit","0"],[0,"xml","space","preserve","x","905.25897","y","52.894646","id","text41",1,"true-wind-label",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","34.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","14.5521","stroke-miterlimit","0"],["id","awsCounter"],[0,"xml","space","preserve","x","94.554222","y","150.88913","id","text39",1,"app-wind-label",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","34.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","14.5521","stroke-miterlimit","0"],[0,"xml","space","preserve","x","94.580925","y","114.63747","id","text40",1,"app-wind",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","66.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","14.5521","stroke-miterlimit","0"],[0,"xml","space","preserve","x","95.967644","y","52.894646","id","text39-7",1,"app-wind-label",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","34.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","14.5521","stroke-miterlimit","0"],["id","layerCurrent"],["id","text11",0,"xml","space","preserve","x","499.78842","y","523.55145",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-stretch","normal","font-size","66.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],["id","layerIndicators",2,"display","inline"],["d","m 506.20767,172.99458 a 6.3888631,8.8250643 0 0 1 -6.38888,8.82508 6.3888631,8.8250643 0 0 1 -6.38888,-8.82508 6.3888631,8.8250643 0 0 1 6.38888,-8.82509 6.3888631,8.8250643 0 0 1 6.38888,8.82509 z M 476.25472,30.811298 493.47058,13.265068 c 3.6173,-3.6867571 9.44162,-3.6867571 13.05892,0 l 17.21586,17.546106 c 3.6173,3.686743 3.6173,9.622786 0,13.309544 l -17.21595,17.54623 c -3.61721,3.686757 -9.44153,3.686757 -13.05893,0 L 476.25472,44.120841 c -3.6174,-3.686743 -3.6174,-9.622924 0,-13.309543 z m 17.20533,-16.510116 h 12.77766 V 173.26408 h -12.77766 z",1,"course-over-ground",2,"stroke-width","14.7329","stroke-linecap","square"],["d","m 451.77021,55.078207 42.08541,-33.202814 a 12.555638,12.555638 0.26446337 0 1 15.64423,0.07221 l 42.20046,33.930296 a 15.557694,15.557694 71.53185 0 1 5.32954,15.957795 L 504.17034,279.76529 a 2.5373267,2.5373267 0.02614114 0 1 -4.91879,-0.002 L 446.37431,70.966036 a 15.416336,15.416336 108.75875 0 1 5.3959,-15.887829 z","transform","matrix(0.7935953,0,0,0.92686935,101.84848,11.000842)",1,"app-wind",2,"display","inline","stroke-width","5.8876","stroke-miterlimit","0"],[0,"xml","space","preserve","x","500","y","110",1,"card-color",2,"font-weight","bold","font-size","70px","font-family","Roboto","text-align","center","text-anchor","middle","display","inline","stroke","none"],["d","m 451.77021,55.078207 42.08541,-33.202814 a 12.555638,12.555638 0.26446337 0 1 15.64423,0.07221 l 42.20046,33.930296 a 15.557694,15.557694 71.53185 0 1 5.32954,15.957795 L 504.17034,279.76529 a 2.5373267,2.5373267 0.02614114 0 1 -4.91879,-0.002 L 446.37431,70.966036 a 15.416336,15.416336 108.75875 0 1 5.3959,-15.887829 z","transform","matrix(0.60410307,0,0,0.70555435,196.91787,21.152867)",1,"true-wind",2,"display","inline","stroke","none","stroke-width","5.8876","stroke-miterlimit","0"],[0,"xml","space","preserve","x","500","y","110","id","text10",1,"card-color",2,"font-weight","bold","font-size","60px","font-family","Roboto","text-align","center","text-anchor","middle","display","inline","stroke","none"],["id","layerHeading",2,"display","inline"],["id","rect1","width","256.47919","height","108.5428","x","371.76041","y","10.805443","rx","23.757372",1,"heading-background",2,"stroke-width","4.43107","stroke-linejoin","bevel","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","0.509946"],["x","511.29395","y","102.86786",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","106.667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","5","stroke-linejoin","bevel","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],[0,"xml","space","preserve","x","181.91386","y","284.25186","id","text3","transform","rotate(-30)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan3","x","181.91386","y","284.25186",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-183.53558","y","283.74811","id","text14","transform","rotate(-60)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan14","x","-183.53558","y","283.74811",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-499.70761","y","100.95312","id","text15","transform","rotate(-90)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan15","x","-499.70761","y","100.95312",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-681.66119","y","-216.36243","id","text16","transform","rotate(-120)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["x","-681.66119","y","-216.36243","id","tspan25",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-681.06616","y","-581.71271","id","text17","transform","rotate(-150)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan17","x","-681.06616","y","-581.71271",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-498.3313","y","-897.40875","id","text18","transform","scale(-1)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan18","x","-498.3313","y","-897.40875",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-184.41313","y","-1080.8452","id","text19","transform","rotate(150)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan19","x","-184.41313","y","-1080.8452",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","181.57225","y","-1080.8853","id","text20","transform","rotate(120)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan20","x","181.57225","y","-1080.8853",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","501.42661","y","-896.93701","id","text21","transform","rotate(90)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan21","x","501.42661","y","-896.93701",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","682.35815","y","-579.63336","id","text22","transform","rotate(60)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan22","x","682.35815","y","-579.63336",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","681.81525","y","-214.27321","id","text23","transform","rotate(30)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan23","x","681.81525","y","-214.27321",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","500.15503","y","101.96342","id","text24",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan24","x","500.15503","y","101.96342",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"]],template:function(t,i){t&1&&(oe(),D(0,"svg",6)(1,"defs",7)(2,"linearGradient",8),ee(3,"stop",9)(4,"stop",10),G(),D(5,"linearGradient",11),ee(6,"stop",9)(7,"stop",10),G(),D(8,"linearGradient",12),ee(9,"stop",13)(10,"stop",14),G(),D(11,"linearGradient",15),ee(12,"stop",16),G(),D(13,"clipPath",17),ee(14,"ellipse",18),G(),ee(15,"linearGradient",19)(16,"linearGradient",20)(17,"linearGradient",21),G(),D(18,"g",22)(19,"g",23),ee(20,"path",24)(21,"path",25),G()(),D(22,"g",26)(23,"g",27),ee(24,"path",28)(25,"path",29)(26,"path",30),G(),D(27,"g",null,0)(29,"g",31),ee(30,"path",32)(31,"path",33)(32,"path",34)(33,"path",35)(34,"path",36)(35,"path",37)(36,"path",38)(37,"path",39)(38,"path",40)(39,"path",41)(40,"path",42)(41,"path",43)(42,"path",44)(43,"path",45)(44,"path",46)(45,"path",47)(46,"path",48)(47,"path",49)(48,"path",50)(49,"path",51)(50,"path",52)(51,"path",53)(52,"path",54)(53,"path",55)(54,"path",56)(55,"path",57)(56,"path",58)(57,"path",59)(58,"path",60)(59,"path",61)(60,"path",62)(61,"path",63)(62,"path",64)(63,"path",65)(64,"path",66)(65,"path",67)(66,"circle",68),I(67,Ly,37,0,":svg:g",69)(68,Wy,37,0,":svg:g",70),G(),D(69,"g",71),ee(70,"path",72)(71,"path",73),G(),D(72,"g",74),ee(73,"path",75)(74,"path",76),G(),D(75,"g",null,1),ee(77,"path",77)(78,"ellipse",78),G(),D(79,"g",null,2),ee(81,"path",79),G()()(),D(82,"g",80)(83,"g",81)(84,"text",82),c(85),G(),D(86,"text",83),c(87),ut(88,"number"),G(),D(89,"text",84),c(90,"TWS"),G()(),D(91,"g",85)(92,"text",86),c(93),G(),D(94,"text",87),c(95),ut(96,"number"),G(),D(97,"text",88),c(98,"AWS"),G()()(),D(99,"g",89)(100,"text",90),c(101),ut(102,"number"),G()(),D(103,"g",91)(104,"g",null,3),ee(106,"path",92),G(),D(107,"g",null,4),ee(109,"path",93),D(110,"text",94),c(111,"A"),G()(),D(112,"g",null,5),ee(114,"path",95),D(115,"text",96),c(116,"T"),G()()(),D(117,"g",97),ee(118,"rect",98),D(119,"text",99)(120,"tspan"),c(121),D(122,"tspan"),c(123,"\xB0"),G()()()()()),t&2&&(f(67),P(i.compassModeEnabled()?67:68),f(2),Te("display",i.closeHauledLineEnabled()?"inline":"none"),f(),Te("display",i.appWindAngle()!=null?"inline":"none"),ie("d",i.closeHauledLineStbdPath()),f(),Te("display",i.appWindAngle()!=null?"inline":"none"),ie("d",i.closeHauledLinePortPath()),f(),Te("display",i.windSectorEnabled()?"inline":"none"),f(),Te("display",i.portWindSectorPath()?"inline":"none"),ie("d",i.portWindSectorPath()||null),f(),Te("display",i.stbdWindSectorPath()?"inline":"none"),ie("d",i.stbdWindSectorPath()||null),f(),ie("display",i.waypointActive()?"inline":"none"),f(4),Te("display",i.driftEnabled()?"inline":"none"),f(4),Te("display",i.twsEnabled()?"inline":"none"),f(2),Q(i.trueWindSpeedUnit()),f(2),Q(In(88,35,i.trueWindSpeed(),"1.1-1")??"--"),f(4),Te("display",i.awsEnabled()?"inline":"none"),f(2),Q(i.appWindSpeedUnit()),f(2),Q(In(96,38,i.appWindSpeed(),"1.1-1")??"--"),f(4),Te("display",i.driftEnabled()?"inline":"none"),f(2),Q(In(102,41,i.driftFlow(),"1.1-1")??"--"),f(3),ie("display",i.courseOverGroundEnabled()?"inline":"none"),f(8),Te("display",i.twaEnabled()?"inline":"none"),f(9),Q(i.headingValue()))},dependencies:[io],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}svg[_ngcontent-%COMP%]{position:absolute;height:100%;width:100%;left:0;top:0}.fixed-dial-background[_ngcontent-%COMP%]{fill:var(--kip-grey-color)}.rotating-dial-Backplate[_ngcontent-%COMP%]{stroke:var(--mat-sys-background);fill:none;stroke-width:95}.starboard[_ngcontent-%COMP%]{stroke:var(--kip-starboard-color)}.port[_ngcontent-%COMP%]{stroke:var(--kip-port-color)}.heading-background[_ngcontent-%COMP%]{stroke:var(--kip-grey-color);fill:var(--kip-widget-card-background-color)}.boat[_ngcontent-%COMP%]{stop-color:var(--kip-grey-color)!important}.contrast-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color)}.contrast-stroke[_ngcontent-%COMP%]{stroke:var(--kip-contrast-color)}.card-color[_ngcontent-%COMP%]{fill:var(--kip-widget-card-background-color)}.true-wind[_ngcontent-%COMP%]{fill:var(--kip-yellow-color)}.true-wind-label[_ngcontent-%COMP%]{fill:var(--kip-yellow-dim-color)}.app-wind[_ngcontent-%COMP%]{fill:var(--kip-orange-color)}.app-wind-label[_ngcontent-%COMP%]{fill:var(--kip-orange-dim-color)}.course-over-ground[_ngcontent-%COMP%]{fill:var(--kip-pink-color)}.next-waypoint[_ngcontent-%COMP%]{stroke:var(--kip-green-color)}.next-waypoint-bar[_ngcontent-%COMP%]{stroke:var(--kip-grey-color)}.laylines[_ngcontent-%COMP%]{stroke:var(--kip-contrast-color)}.wind-sector-port[_ngcontent-%COMP%]{fill:var(--kip-port-color)}.wind-sector-stbd[_ngcontent-%COMP%]{fill:var(--kip-starboard-color)}.drift-arrow[_ngcontent-%COMP%]{stop-color:var(--kip-blue-color)}"],changeDetection:0})}return n})();var ih=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,filterSelfPaths:!0,paths:{headingPath:{description:"True Heading",path:"self.navigation.headingTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",showConvertUnitTo:!1,sampleTime:1e3},appWindAngle:{description:"Apparent Wind Angle",path:"self.environment.wind.angleApparent",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",showConvertUnitTo:!1,sampleTime:1e3},appWindSpeed:{description:"Apparent Wind Speed",path:"self.environment.wind.speedApparent",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"m/s",convertUnitTo:"knots",sampleTime:1e3},trueWindAngle:{description:"True Wind Angle",path:"self.environment.wind.angleTrueWater",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",showConvertUnitTo:!1,sampleTime:1e3},trueWindSpeed:{description:"True Wind Speed",path:"self.environment.wind.speedTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"m/s",convertUnitTo:"knots",sampleTime:1e3},courseOverGround:{description:"True Course Over Ground",path:"self.navigation.courseOverGroundTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",showConvertUnitTo:!1,convertUnitTo:"deg",sampleTime:1e3},nextWaypointBearing:{description:"Next Waypoint True Bearing",path:"self.navigation.course.calcValues.bearingTrue",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",showConvertUnitTo:!1,sampleTime:1e3},set:{description:"True Drift Set",path:"self.environment.current.setTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",showConvertUnitTo:!1,sampleTime:1e3},drift:{description:"Drift Speed Impact",path:"self.environment.current.drift",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"m/s",convertUnitTo:"knots",sampleTime:1e3}},compassModeEnabled:!0,windSectorEnable:!0,windSectorWindowSeconds:5,laylineEnable:!0,laylineAngle:40,waypointEnable:!0,courseOverGroundEnable:!0,driftEnable:!0,awsEnable:!0,twsEnable:!0,twaEnable:!0,sailSetupEnable:!1,enableTimeout:!1,dataTimeout:5};runtime=A(xe);stream=A(Be);zones=A(Je);cdr=A(ki);hasHeading=!1;hasCOG=!1;hasAWA=!1;hasAWS=!1;hasTWA=!1;hasTWS=!1;hasSet=!1;hasDrift=!1;hasWPT=!1;currentHeading=w(0);courseOverGroundAngle=w(0);appWindAngle=w(0);appWindSpeed=w(0);appWindSpeedUnit=w("");trueWindAngle=w(0);trueWindSpeed=w(0);trueWindSpeedUnit=w("");driftFlow=w(0);driftSet=w(0);waypointAngle=w(0);historicalWindDirection=[];trueWindMinHistoric=w(void 0);trueWindMidHistoric=w(void 0);trueWindMaxHistoric=w(void 0);windSectorObservableSub=null;windSamples=[];windMinDeque=[];windMaxDeque=[];windSampleIndex=0;lastUnwrapped=null;lastSector={};markScheduled=!1;scheduleRafId=null;DEG_EPSILON=1;SPEED_EPSILON=.1;constructor(){W(()=>{let e=this.runtime.options();e&&z(()=>{this.appWindSpeedUnit.set(e.paths.appWindSpeed.convertUnitTo),this.trueWindSpeedUnit.set(e.paths.trueWindSpeed.convertUnitTo),this.registerStreams(),this.stopWindSectors(),this.startWindSectors()})})}onHeadingUpdate=e=>{e.data.value==null&&(e.data.value=0);let t=this.normalizeAngle(e.data.value);(!this.hasHeading||this.angleDelta(this.currentHeading(),t)>=this.DEG_EPSILON)&&(this.currentHeading.set(t),this.hasHeading=!0,this.scheduleMarkForCheck())};onCOGUpdate=e=>{e.data.value==null&&(e.data.value=0);let t=this.normalizeAngle(e.data.value);(!this.hasCOG||this.angleDelta(this.courseOverGroundAngle(),t)>=this.DEG_EPSILON)&&(this.courseOverGroundAngle.set(t),this.hasCOG=!0,this.scheduleMarkForCheck())};onDriftUpdate=e=>{e.data.value==null&&(e.data.value=0);let t=e.data.value;(!this.hasDrift||Math.abs(this.driftFlow()-t)>=this.SPEED_EPSILON)&&(this.driftFlow.set(t),this.hasDrift=!0,this.scheduleMarkForCheck())};onSetUpdate=e=>{e.data.value==null&&(e.data.value=0);let t=this.normalizeAngle(e.data.value);(!this.hasSet||this.angleDelta(this.driftSet(),t)>=this.DEG_EPSILON)&&(this.driftSet.set(t),this.hasSet=!0,this.scheduleMarkForCheck())};onWaypointUpdate=e=>{let t=e.data.value,i=this.normalizeAngle(t);(!this.hasWPT||this.angleDelta(this.waypointAngle(),i)>=this.DEG_EPSILON)&&(this.waypointAngle.set(i),this.hasWPT=!0,this.scheduleMarkForCheck())};onAppWindAngle=e=>{e.data.value==null&&(e.data.value=0);let t=e.data.value,i=this.normalizeAngle(t);(!this.hasAWA||this.angleDelta(this.appWindAngle(),i)>=this.DEG_EPSILON)&&(this.appWindAngle.set(i),this.hasAWA=!0,this.runtime.options()?.windSectorEnable&&this.addHistoricalWindDirection(this.normalizeAngle(t)),this.scheduleMarkForCheck())};onAppWindSpeed=e=>{e.data.value==null&&(e.data.value=0);let t=e.data.value;(!this.hasAWS||Math.abs(this.appWindSpeed()-t)>=this.SPEED_EPSILON)&&(this.appWindSpeed.set(t),this.hasAWS=!0,this.scheduleMarkForCheck())};onTrueWindSpeed=e=>{e.data.value==null&&(e.data.value=0);let t=e.data.value;(!this.hasTWS||Math.abs(this.trueWindSpeed()-t)>=this.SPEED_EPSILON)&&(this.trueWindSpeed.set(t),this.hasTWS=!0,this.scheduleMarkForCheck())};onTrueWindAngle=e=>{e.data.value==null&&(e.data.value=0);let i=this.runtime.options()?.paths.trueWindAngle.path||"",o=i.includes("angleTrueWater")||i.includes("angleTrueGround")?this.addHeading(this.currentHeading(),e.data.value):e.data.value,r=this.normalizeAngle(o);(!this.hasTWA||this.angleDelta(this.trueWindAngle(),r)>=this.DEG_EPSILON)&&(this.trueWindAngle.set(r),this.hasTWA=!0,this.scheduleMarkForCheck())};registerStreams(){this.runtime.options()&&this.zones.runOutsideAngular(()=>{this.stream.observe("headingPath",this.onHeadingUpdate),this.stream.observe("courseOverGround",this.onCOGUpdate),this.stream.observe("drift",this.onDriftUpdate),this.stream.observe("set",this.onSetUpdate),this.stream.observe("nextWaypointBearing",this.onWaypointUpdate),this.stream.observe("appWindAngle",this.onAppWindAngle),this.stream.observe("appWindSpeed",this.onAppWindSpeed),this.stream.observe("trueWindSpeed",this.onTrueWindSpeed),this.stream.observe("trueWindAngle",this.onTrueWindAngle)})}ngOnDestroy(){this.stopWindSectors(),this.scheduleRafId!=null&&(cancelAnimationFrame(this.scheduleRafId),this.scheduleRafId=null)}startWindSectors(){if(this.windSamples=[],this.windMinDeque=[],this.windMaxDeque=[],this.windSampleIndex=0,this.lastUnwrapped=null,this.lastSector={},!this.runtime.options()?.windSectorEnable){this.trueWindMinHistoric.set(void 0),this.trueWindMidHistoric.set(void 0),this.trueWindMaxHistoric.set(void 0),this.lastSector={},this.scheduleMarkForCheck();return}this.zones.runOutsideAngular(()=>{this.windSectorObservableSub=Fr(1e3).subscribe(()=>{this.historicalCleanup()})})}addHistoricalWindDirection(e){let t=Date.now(),i=this.unwrapAngle(e),o=this.windSampleIndex++;for(this.windSamples.push({t,u:i,i:o});this.windMinDeque.length&&this.windMinDeque[this.windMinDeque.length-1].u>=i;)this.windMinDeque.pop();for(this.windMinDeque.push({i:o,u:i});this.windMaxDeque.length&&this.windMaxDeque[this.windMaxDeque.length-1].u<=i;)this.windMaxDeque.pop();this.windMaxDeque.push({i:o,u:i})}historicalCleanup(){if(!this.runtime.options()?.windSectorEnable)return;let e=Date.now()-this.runtime.options().windSectorWindowSeconds*1e3;for(;this.windSamples.length&&this.windSamples[0].t<e;){let h=this.windSamples.shift();if(!h)break;this.windMinDeque.length&&this.windMinDeque[0].i===h.i&&this.windMinDeque.shift(),this.windMaxDeque.length&&this.windMaxDeque[0].i===h.i&&this.windMaxDeque.shift()}if(!this.windSamples.length||!this.windMinDeque.length||!this.windMaxDeque.length){(this.trueWindMinHistoric()!==void 0||this.trueWindMidHistoric()!==void 0||this.trueWindMaxHistoric()!==void 0)&&(this.trueWindMinHistoric.set(void 0),this.trueWindMidHistoric.set(void 0),this.trueWindMaxHistoric.set(void 0),this.lastSector={},this.scheduleMarkForCheck());return}let t=this.windMinDeque[0].u,i=this.windMaxDeque[0].u,o=(t+i)/2,r=this.normalizeAngle(t),s=this.normalizeAngle(o),l=this.normalizeAngle(i);(this.lastSector.min===void 0||this.angleDelta(this.lastSector.min,r)>=this.DEG_EPSILON||this.lastSector.mid===void 0||this.angleDelta(this.lastSector.mid,s)>=this.DEG_EPSILON||this.lastSector.max===void 0||this.angleDelta(this.lastSector.max,l)>=this.DEG_EPSILON)&&(this.trueWindMinHistoric.set(r),this.trueWindMidHistoric.set(s),this.trueWindMaxHistoric.set(l),this.lastSector={min:r,mid:s,max:l},this.scheduleMarkForCheck())}stopWindSectors(){this.windSectorObservableSub?.unsubscribe()}unwrapAngle(e){if(this.lastUnwrapped==null)return this.lastUnwrapped=e,e;let t=this.lastUnwrapped,i=(t%360+360)%360,o=(e-i+540)%360-180,r=t+o;return this.lastUnwrapped=r,r}normalizeAngle(e){return(e%360+360)%360}addHeading(e,t){let i=(e+t)%360;return i<0&&(i+=360),i}angleDelta(e,t){let i=(t-e+540)%360-180;return Math.abs(i)}scheduleMarkForCheck(){this.markScheduled||(this.markScheduled=!0,this.zones.runOutsideAngular(()=>{this.scheduleRafId=requestAnimationFrame(()=>{this.zones.run(()=>{this.cdr.markForCheck()}),this.markScheduled=!1,this.scheduleRafId=null})}))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-wind-steer"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:1,vars:25,consts:[[3,"compassHeading","compassModeEnabled","courseOverGroundAngle","courseOverGroundEnabled","trueWindAngle","twsEnabled","twaEnabled","trueWindSpeed","trueWindSpeedUnit","appWindAngle","awsEnabled","appWindSpeed","appWindSpeedUnit","laylineAngle","closeHauledLineEnabled","windSectorEnabled","driftEnabled","driftFlow","driftSet","waypointAngle","waypointEnabled","trueWindMinHistoric","trueWindMidHistoric","trueWindMaxHistoric","sailSetupEnabled"]],template:function(t,i){if(t&1&&O(0,"svg-windsteer",0),t&2){let o,r,s,l,m,h,v,y,C,S,_;R("compassHeading",i.currentHeading())("compassModeEnabled",(o=i.runtime.options())==null?null:o.compassModeEnabled)("courseOverGroundAngle",i.courseOverGroundAngle())("courseOverGroundEnabled",(r=i.runtime.options())==null?null:r.courseOverGroundEnable)("trueWindAngle",i.trueWindAngle())("twsEnabled",(s=i.runtime.options())==null?null:s.twsEnable)("twaEnabled",(l=i.runtime.options())==null?null:l.twaEnable)("trueWindSpeed",i.trueWindSpeed())("trueWindSpeedUnit",i.trueWindSpeedUnit())("appWindAngle",i.appWindAngle())("awsEnabled",(m=i.runtime.options())==null?null:m.awsEnable)("appWindSpeed",i.appWindSpeed())("appWindSpeedUnit",i.appWindSpeedUnit())("laylineAngle",(h=i.runtime.options())==null?null:h.laylineAngle)("closeHauledLineEnabled",(v=i.runtime.options())==null?null:v.laylineEnable)("windSectorEnabled",(y=i.runtime.options())==null?null:y.windSectorEnable)("driftEnabled",(C=i.runtime.options())==null?null:C.driftEnable)("driftFlow",i.driftFlow())("driftSet",i.driftSet())("waypointAngle",i.waypointAngle())("waypointEnabled",(S=i.runtime.options())==null?null:S.waypointEnable)("trueWindMinHistoric",i.trueWindMinHistoric())("trueWindMidHistoric",i.trueWindMidHistoric())("trueWindMaxHistoric",i.trueWindMaxHistoric())("sailSetupEnabled",((_=i.runtime.options())==null?null:_.sailSetupEnable)??!1)}},dependencies:[th],encapsulation:2,changeDetection:0})}return n})();function Fy(n,a){if(n&1){let e=we();d(0,"h3"),c(1,"Getting Started"),u(),d(2,"p"),c(3,"Welcome to KIP! Here are some basic gestures to help you navigate the application. Access the "),d(4,"a",1),c(5,"KIP Help"),u(),c(6," documentation to learn more about KIP."),u(),d(7,"table",2)(8,"thead")(9,"tr")(10,"th"),c(11,"Actions"),u(),d(12,"th"),c(13,"Touch"),u(),d(14,"th"),c(15,"Mouse"),u(),d(16,"th"),c(17,"Keyboard Shortcuts"),u()()(),d(18,"tbody")(19,"tr")(20,"td"),c(21,"Open Actions menu"),u(),d(22,"td"),c(23,"Swipe left"),u(),d(24,"td"),c(25,"Click, drag left, and release"),u(),d(26,"td")(27,"kbd"),c(28,"Shift"),u(),c(29," + "),d(30,"kbd"),c(31,"Ctrl"),u(),c(32," + "),d(33,"kbd",3),c(34,"\u2190"),u(),c(35," (Left Arrow)"),u()(),d(36,"tr")(37,"td"),c(38,"Open Notification menu"),u(),d(39,"td"),c(40,"Swipe right"),u(),d(41,"td"),c(42,"Click, drag right, and release"),u(),d(43,"td")(44,"kbd"),c(45,"Shift"),u(),c(46," + "),d(47,"kbd"),c(48,"Ctrl"),u(),c(49," + "),d(50,"kbd",3),c(51,"\u2192"),u(),c(52," (Right Arrow)"),u()(),d(53,"tr")(54,"td"),c(55,"Cycle through dashboards"),u(),d(56,"td"),c(57,"Swipe up/down"),u(),d(58,"td"),c(59,"Click, drag up/down, and release"),u(),d(60,"td")(61,"kbd"),c(62,"Shift"),u(),c(63," + "),d(64,"kbd"),c(65,"Ctrl"),u(),c(66," + "),d(67,"kbd",3),c(68,"\u2191"),u(),c(69,"/"),d(70,"kbd",3),c(71,"\u2193"),u(),c(72," (Up/Down Arrow)"),u()(),d(73,"tr")(74,"td"),c(75,"Toggle Fullscreen"),u(),d(76,"td"),c(77,"N/A"),u(),d(78,"td"),c(79,"N/A"),u(),d(80,"td")(81,"kbd"),c(82,"Shift"),u(),c(83," + "),d(84,"kbd"),c(85,"Ctrl"),u(),c(86," + "),d(87,"kbd"),c(88,"F"),u()()(),d(89,"tr")(90,"td"),c(91,"Toggle Night mode"),u(),d(92,"td"),c(93,"N/A"),u(),d(94,"td"),c(95,"N/A"),u(),d(96,"td")(97,"kbd"),c(98,"Shift"),u(),c(99," + "),d(100,"kbd"),c(101,"Ctrl"),u(),c(102," + "),d(103,"kbd"),c(104,"N"),u()()(),d(105,"tr")(106,"td"),c(107,"Toggle dashboard edit mode"),u(),d(108,"td"),c(109,"N/A"),u(),d(110,"td"),c(111,"N/A"),u(),d(112,"td")(113,"kbd"),c(114,"Shift"),u(),c(115," + "),d(116,"kbd"),c(117,"Ctrl"),u(),c(118," + "),d(119,"kbd"),c(120,"E"),u()()()()(),d(121,"i"),c(122,"Note that the words Touch and Tap are synonymous with mouse Click."),u(),O(123,"br")(124,"br"),d(125,"h3"),c(126,"Login to Signal K"),u(),d(127,"p"),c(128," The first step is to configure Signal K server authentication ("),d(129,"i"),c(130,"a pre-existing Signal K server username and password is required"),u(),c(131,"). Go to KIP's Connectivity options, toggle "),d(132,"strong"),c(133,"Login to server"),u(),c(134,", enter your Signal K credentials and click "),d(135,"strong"),c(136,"Sign in"),u(),c(137,". Once completed, click the upper right X button to get back to this dashboard ("),d(138,"a",4),c(139,"Connectivity options"),u(),c(140,"). "),u(),d(141,"ul")(142,"li"),c(143," If you don\u2019t have a Signal K account, ask your captain or access the Signal K Admin Settings / Users page and create a user. "),u(),d(144,"li"),c(145," If you see an error, double-check your username and password, and make sure your device is on the same network as your Signal K server. "),u()(),d(146,"h3"),c(147,"Option 1: Load Demonstration Dashboards"),u(),d(148,"p"),c(149," Try the sample dashboards using data from your server: "),O(150,"br"),d(151,"button",5),$("click",function(){ne(e);let i=T();return ae(i.loadDemoConfig())}),c(152,"Load Demo"),u()(),d(153,"h3"),c(154,"Option 2: Create Your Own Layout"),u(),d(155,"p"),c(156,' The text you are reading is actually a widget that fills half of the dashboard. The screen is split in halves at the middle. This mode is called Chartplotter mode. It can later be turned off in Settings / Options / Display. Dashboards are "Locked" by default to prevent accidental modifications. To edit a dashboard, swipe left and hit the bottom unlock menu button. Note that you can add and manage dashboards using the Settings button from the Actions menu. '),u(),d(157,"p")(158,"strong"),c(159,"Try editing the Dashboard now to receive further instructions!"),u()()}}function By(n,a){n&1&&(d(0,"h2"),c(1,"Changing Layouts"),u(),c(2," Follow these simple steps to learn how to change your dashboard layout: "),d(3,"ol")(4,"li"),c(5,"Resize this Tutorial widget using the now visible dashed borders or corners arrows. Resize it so it does not take up all the screen. You need free space in your dashboard to add more widgets. You can delete this Tutorial widget later when you are done with the instructions."),u(),d(6,"li"),c(7,"Touch & Hold or Click & Hold in an empty area to open the Add Widget selection panel."),u(),d(8,"li"),c(9,"Choose a widget from the selection panel to add it to the dashboard."),u()(),d(10,"h3"),c(11,"Possible widget operations"),u(),d(12,"ul")(13,"li")(14,"strong"),c(15,"Touch and drag"),u(),c(16," to move widgets"),u(),d(17,"li")(18,"strong"),c(19,"Drag corners and sides"),u(),c(20," to resize widgets"),u(),d(21,"li")(22,"strong"),c(23,"Double Tap"),u(),c(24," on a widget to configure it"),u(),d(25,"li")(26,"strong"),c(27,"Press and Hold"),u(),c(28," on a widget to delete or duplicate widgets"),u()(),d(29,"h2"),c(30,"Exiting dashboard edit mode"),u(),d(31,"p"),c(32,"Use the Save or Cancel buttons in the lower right corner to either persist your changes or revert changes."),u(),d(33,"h2"),c(34,"Adding more dashboards"),u(),d(35,"p"),c(36,"Swipe left and hit the Dashboards button. From this page you can add, rename, order, delete, and duplicate entire dashboards."),u())}var nh=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={filterSelfPaths:!0};dashboard=A(Tt);settings=A(Ht);loadDemoConfig(){this.settings.loadDemoConfig()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-tutorial"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:3,vars:1,consts:[[1,"tutorial-container"],["routerLink","/help"],[1,"nav-table"],[2,"font-size","x-large"],["routerLink","/options"],["mat-flat-button","",2,"margin-left","15px",3,"click"]],template:function(t,i){t&1&&(d(0,"div",0),I(1,Fy,160,0)(2,By,37,0),u()),t&2&&(f(),P(i.dashboard.isDashboardStatic()?1:2))},dependencies:[vt,us],styles:[".tutorial-container[_ngcontent-%COMP%]{position:absolute;top:0;left:0;display:block;height:100%;width:100%;overflow-y:auto}.tutorial-container[_ngcontent-%COMP%]{padding:0 15px}.nav-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;margin-bottom:2em}.nav-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .nav-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border:1px solid #bbb;padding:.5em 1em;text-align:center}.nav-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{background:#ddd;color:#222;font-weight:700}.nav-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(2n){background:#242424}.warning[_ngcontent-%COMP%]{color:#b71c1c}.button-group[_ngcontent-%COMP%]{margin-top:2em;display:flex;gap:20px}a[_ngcontent-%COMP%]:visited, a[_ngcontent-%COMP%]:link{color:var(--kip-blue-color)}"],changeDetection:0})}return n})();var Gy=["canvas"],Vt=(()=>{class n{text=x.required();color=x.required();canvasRef=he.required("canvas");canvas=A(St);canvasElement;canvasCtx;isReady=!1;cssWidth=0;cssHeight=0;constructor(){}ngAfterViewInit(){this.canvasElement=this.canvasRef().nativeElement,this.canvasCtx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.drawTitle()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),this.isReady=!0,this.drawTitle()}ngOnChanges(e){(e.text||e.color)&&this.drawTitle()}drawTitle(){this.isReady&&this.canvas.drawTitle(this.canvasCtx,this.text(),this.color(),"normal",this.cssWidth,this.cssHeight)}ngOnDestroy(){try{this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}this.canvasCtx=null,this.canvasElement=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-title"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,Gy,5),t&2&&Me()},inputs:{text:[1,"text"],color:[1,"color"]},features:[dn],decls:3,vars:0,consts:[["canvas",""],[1,"title-wrapper"],[1,"title-canvas"]],template:function(t,i){t&1&&(D(0,"div",1),ee(1,"canvas",2,0),G())},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;z-index:10}.title-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;min-height:1px}.title-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;display:block}"]})}return n})();var oi=(()=>{class n{resizeChange=new hi;kipResize=new hi;el=A(nt);ro=null;constructor(){this.ro=new ResizeObserver(e=>{let t=e[e.length-1],{width:i,height:o}=t.contentRect;this.resizeChange.emit(t),this.kipResize.emit({width:i,height:o,entry:t})}),this.ro.observe(this.el.nativeElement)}ngOnDestroy(){this.ro?.disconnect(),this.ro=null}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["","kipResizeObserver",""]],outputs:{resizeChange:"resizeChange",kipResize:"kipResize"}})}return n})();var zy=["svgSlider"];function Uy(n,a){n&1&&O(0,"div",10)}var ah=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,displayName:"Slider Label",filterSelfPaths:!0,paths:{gaugePath:{description:"PUT Supported Numeric Path. IMPORTANT: Format must be set to (base)",path:null,source:null,pathType:"number",isPathConfigurable:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:null,showConvertUnitTo:!1,convertUnitTo:null,supportsPut:!0,sampleTime:500}},displayScale:{lower:0,upper:1,type:"linear"},enableTimeout:!1,dataTimeout:5,color:"contrast"};runtime=A(xe);streams=A(Be);svgElement=he.required("svgSlider");dashboard=A(Tt);signalkRequestsService=A(vi);toast=A(gn);labelColor=w(void 0);barColor=w(void 0);lineStartPx;lineWidthPx;lineEndPx;resizeTimeout=null;handlePositionView=w(20);lineWidthView=L(()=>`${Math.max(0,this.handlePositionView()-this.LINE_START)}px`);pathValue=0;lineStart=20;isDragStarted=!1;VIEWBOX_WIDTH=200;LINE_START=20;LINE_WIDTH=160;colorMap=null;valueChange$=new Zt;constructor(){W(()=>{let e=this.theme(),t=this.runtime.options();!t||!e||z(()=>{this.ensureColorMap(),this.getColors(t.color)})}),W(()=>{let e=this.runtime.options(),t=e?.paths?.gaugePath?.path;!e||!t||z(()=>{this.calculateLineBounds(),this.streams.observe("gaugePath",i=>{if(!i||!i.data){queueMicrotask(()=>this.updateHandlePosition(this.mapValueToPosition(e.displayScale.lower)));return}queueMicrotask(()=>this.updateHandlePosition(this.mapValueToPosition(i.data.value)))})})})}ngOnInit(){let e=this.runtime.options();e&&this.getColors(e.color),this.valueChange$.pipe(si(t=>{let i=this.runtime.options();return i?this.isWithinMargin(t,i.displayScale.lower,i)?i.displayScale.lower:this.isWithinMargin(t,i.displayScale.upper,i)?i.displayScale.upper:parseFloat(t.toFixed(2)):t}),qn(200),Br()).subscribe(t=>{this.sendValue(t)})}mapValueToPosition(e){let t=this.runtime.options();if(!t)return e;let i=t.displayScale.upper-t.displayScale.lower,o=this.LINE_WIDTH;return(e-t.displayScale.lower)/i*o+this.LINE_START}mapPositionToValue(e){let t=this.runtime.options();if(!t)return e;let i=t.displayScale.upper-t.displayScale.lower,o=this.LINE_WIDTH;return(e-this.LINE_START)/o*i+t.displayScale.lower}isWithinMargin(e,t,i){let o=(i.displayScale.upper-i.displayScale.lower)*.01;return Math.abs(e-t)<=o}sendValue(e){let t=this.runtime.options()?.paths?.gaugePath?.path;this.signalkRequestsService.putRequest(t,e,this.id())}onResized(){this.resizeTimeout&&clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(()=>{this.calculateLineBounds()},200)}calculateLineBounds(){if(!this.svgElement()?.nativeElement){console.warn("[Slider Widget] SVG element is not initialized yet.");return}let e=this.svgElement().nativeElement.getBoundingClientRect(),t=this.LINE_START/this.VIEWBOX_WIDTH*e.width,i=this.LINE_WIDTH/this.VIEWBOX_WIDTH*e.width;this.lineStartPx=t,this.lineWidthPx=i,this.lineEndPx=this.lineStartPx+this.lineWidthPx}updateHandlePosition(e){let t=Math.max(this.LINE_START,Math.min(this.LINE_START+this.LINE_WIDTH,e));this.handlePositionView.set(t)}getPointerX(e){return e.clientX-this.svgElement().nativeElement.getBoundingClientRect().left}onPointerDown(e){this.isDragStarted=!0,this.onPointerMove(e),e.stopPropagation(),e.preventDefault()}onPointerMove(e){if(this.isDragStarted){let t=this.getPointerX(e);if(t>=this.lineStartPx&&t<=this.lineEndPx){let i=(t-this.lineStartPx)/this.lineWidthPx*this.LINE_WIDTH+this.LINE_START;this.updateHandlePosition(i);let o=this.handlePositionView(),r=this.runtime.options();r&&o<=this.LINE_START?this.pathValue=r.displayScale.lower:r&&o>=this.LINE_START+this.LINE_WIDTH?this.pathValue=r.displayScale.upper:this.pathValue=this.mapPositionToValue(o),this.valueChange$.next(this.pathValue)}}}onPointerUp(){this.isDragStarted=!1,this.valueChange$.next(this.pathValue)}onPointerLeave(){this.isDragStarted&&(this.isDragStarted=!1,this.valueChange$.next(this.pathValue))}getColors(e){if(this.ensureColorMap(),!this.colorMap)return;let t=this.colorMap.get(e)||this.colorMap.get("contrast");this.labelColor.set(t.label),this.barColor.set(t.bar)}ensureColorMap(){let e=this.theme();e&&(this.colorMap=new Map([["contrast",{label:e.contrastDim,bar:e.contrast}],["blue",{label:e.blueDim,bar:e.blue}],["green",{label:e.greenDim,bar:e.green}],["pink",{label:e.pinkDim,bar:e.pink}],["orange",{label:e.orangeDim,bar:e.orange}],["purple",{label:e.purpleDim,bar:e.purple}],["grey",{label:e.greyDim,bar:e.grey}],["yellow",{label:e.yellowDim,bar:e.yellow}]]))}ngOnDestroy(){this.valueChange$.complete(),this.resizeTimeout&&clearTimeout(this.resizeTimeout)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-slider"]],viewQuery:function(t,i){t&1&&_e(i.svgElement,zy,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:11,vars:7,consts:[["svgSlider",""],[3,"text","color"],["kipResizeObserver","",1,"widgets-container",3,"resizeChange"],["width","100%","height","100%","viewBox","0 40 200 40"],["width","160","height","8","rx","4.5","id","rect3","x","20","y","56",1,"slider-bg-bar",2,"display","inline","stroke-width","1.57144"],["height","8","rx","4.5","id","rect3","x","20","y","56",2,"display","inline","stroke-width","1.57144"],["id","g22"],["cy","60","fill","#ffffff","id","circle3","r","19.549999",2,"display","inline","fill","#4d4d4d","fill-opacity","1","stroke","#8c8c8c","stroke-width","0.9","stroke-dasharray","none","stroke-opacity","1"],["cy","60","fill","#ffffff","id","circle3-3","r","17.950001",2,"display","inline","fill","#ffffff","fill-opacity","1","stroke","#e6e6e6","stroke-width","1.8","stroke-dasharray","none","stroke-opacity","0.97"],["cursor","pointer","width","200","height","40","x","0","y","40",2,"display","inline","fill","rgba(0, 0, 0, 0)","stroke","none","stroke-width","0.3","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0",3,"pointerdown","pointerup","pointermove","pointerleave"],[1,"widgetOverlay"]],template:function(t,i){if(t&1&&(O(0,"widget-title",1),d(1,"div",2),$("resizeChange",function(){return i.onResized()}),oe(),d(2,"svg",3),O(3,"rect",4)(4,"rect",5),d(5,"g",6),O(6,"circle",7)(7,"circle",8),u(),d(8,"rect",9,0),$("pointerdown",function(r){return i.onPointerDown(r)})("pointerup",function(){return i.onPointerUp()})("pointermove",function(r){return i.onPointerMove(r)})("pointerleave",function(){return i.onPointerLeave()}),u()(),I(10,Uy,1,0,"div",10),u()),t&2){let o;R("text",i.runtime==null||(o=i.runtime.options())==null?null:o.displayName)("color",i.labelColor()),f(4),ie("width",i.lineWidthView())("fill",i.barColor()),f(2),ie("cx",i.handlePositionView()),f(),ie("cx",i.handlePositionView()),f(3),P(i.dashboard.isDashboardStatic()?-1:10)}},dependencies:[oi,Vt],styles:[".widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 20px}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}.slider-bg-bar[_ngcontent-%COMP%]{fill:var(--mat-sys-inverse-on-surface)}"],changeDetection:0})}return n})();var Hy=["gaugeBarAnimate"];function qy(n,a){if(n&1&&(oe(),ee(0,"rect",14)),n&2){let e=a.$implicit,t=T();ie("fill",e.color)("x",5+(e.from-t.gaugeMinValue())*t.scaleSliceValue())("width",(e.to-e.from)*t.scaleSliceValue())}}var oh=(()=>{class n{gaugeBarAnimate=he("gaugeBarAnimate");displayName=x.required();displayNameColor=x.required();dataValue=x.required();dataValueLabel=x.required();unitLabel=x.required();barColor=x.required();barColorGradient=x.required();barColorBackground=x.required();gaugeMinValue=x.required();gaugeMaxValue=x.required();highlights=x.required();scaleSliceValue=L(()=>{let e=this.gaugeMaxValue()-this.gaugeMinValue();return e!==0?195/e:0});newGaugeValue=w(null);oldGaugeValue=w(null);firstRenderApplied=!1;scheduleRafId=null;constructor(){W(()=>{let e=this.gaugeMinValue(),t=this.dataValue();t==null&&(t=e);let i=(t-e)*this.scaleSliceValue();z(()=>{let o=this.newGaugeValue();!this.firstRenderApplied||o===null?(this.oldGaugeValue.set(i),this.newGaugeValue.set(i),this.firstRenderApplied=!0):(this.oldGaugeValue.set(o),this.newGaugeValue.set(i)),this.gaugeBarAnimate()?.nativeElement&&(this.scheduleRafId!==null&&cancelAnimationFrame(this.scheduleRafId),this.scheduleRafId=requestAnimationFrame(()=>{let r=this.gaugeBarAnimate();r?.nativeElement&&r.nativeElement.beginElement(),this.scheduleRafId=null}))})})}ngOnDestroy(){this.scheduleRafId!==null&&(cancelAnimationFrame(this.scheduleRafId),this.scheduleRafId=null)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["svg-simple-linear-gauge"]],viewQuery:function(t,i){t&1&&_e(i.gaugeBarAnimate,Hy,5),t&2&&Me()},inputs:{displayName:[1,"displayName"],displayNameColor:[1,"displayNameColor"],dataValue:[1,"dataValue"],dataValueLabel:[1,"dataValueLabel"],unitLabel:[1,"unitLabel"],barColor:[1,"barColor"],barColorGradient:[1,"barColorGradient"],barColorBackground:[1,"barColorBackground"],gaugeMinValue:[1,"gaugeMinValue"],gaugeMaxValue:[1,"gaugeMaxValue"],highlights:[1,"highlights"]},decls:26,vars:11,consts:[["gaugeBarAnimate",""],["viewBox","0 0 205 50","preserveAspectRatio","xMidYMid","version","1.1","id","svg8",1,"svg-simple-linear"],["id","defs2"],["id","gaugeBarGradient"],["id","stop849","offset","0",2,"stop-opacity","1"],["id","stop851","offset","0.40",2,"stop-opacity","0"],["id","linearGradient855","gradientTransform","translate(5,-30)","gradientUnits","userSpaceOnUse","y2","34.5","x2","-5","y1","34.5","x1","-6","href","#gaugeBarGradient"],["id","layer1",2,"display","inline"],["id","GaugeBackground","width","195","height","9","x","5","y","30","ry","0",2,"opacity","1","fill-opacity","1","stroke","none","stroke-width","0.265899","stroke-miterlimit","4","stroke-dasharray","none","stroke-opacity","1"],["id","gaugeBar"],["id","gaugeValue","width","1","height","9","x","0","y","0","ry","0",2,"mix-blend-mode","normal","fill-opacity","1","stroke","none"],["id","gaugeValueGradient","transform","scale(-1,1)","width","1","height","9","x","-1","y","0","ry","0",2,"display","inline","opacity","1","mix-blend-mode","multiply","fill","url(#linearGradient855)","stroke","none"],[0,"xlink","href","#gaugeBar","transform","translate(5,30)"],["attributeName","transform","type","scale","begin","indefinite","dur","0.5s","additive","sum","fill","freeze"],["y","39.5","height","0.75","ry","0",2,"opacity","1","fill-opacity","1","stroke","none","stroke-width","0.265899","stroke-miterlimit","4","stroke-dasharray","none","stroke-opacity","1"],["id","layer2",2,"display","inline"],[0,"xml","space","preserve","x","4.1731763","y","25.413595","id","displayNameText",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","12.7px","line-height","1.25","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","letter-spacing","0px","word-spacing","0px"],["id","tspan1945","x","4.1731763","y","25.413595",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","12.7px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["text-anchor","end","id","gaugeTexts","y","25.293016","x","200.37138",0,"xml","space","preserve",1,"simpleLinear-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","22.5778px","line-height","1.25","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","letter-spacing","0px","word-spacing","0px"],["y","25.293016","x","200.37138","id","valueText",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","22.5778px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["dy","-9","id","unitText",2,"text-transform","capitalize","font-size","9.87778px"]],template:function(t,i){t&1&&(oe(),D(0,"svg",1)(1,"defs",2)(2,"linearGradient",3),ee(3,"stop",4)(4,"stop",5),G(),ee(5,"linearGradient",6),G(),D(6,"g",7),ee(7,"rect",8),D(8,"defs")(9,"g",9),ee(10,"rect",10)(11,"rect",11),G()(),D(12,"use",12),ee(13,"animateTransform",13,0),G(),ye(15,qy,1,3,":svg:rect",14,Re),G(),D(17,"g",15)(18,"text",16)(19,"tspan",17),c(20),G()(),D(21,"text",18)(22,"tspan",19),c(23),G(),D(24,"tspan",20),c(25),G()()()()),t&2&&(f(3),ie("stop-color",i.barColorGradient()),f(),ie("stop-color",i.barColorGradient()),f(3),ie("fill",i.barColorBackground()),f(5),Te("fill",i.barColor()),f(),ie("from",i.oldGaugeValue()+" 1")("to",i.newGaugeValue()+" 1"),f(2),Ae(i.highlights()),f(4),ie("fill",i.displayNameColor()),f(),be(" ",i.displayName()),f(3),Q(i.dataValueLabel()),f(2),Q(i.unitLabel()))},styles:["svg[_ngcontent-%COMP%]{position:absolute;height:100%;width:100%;left:0;top:0}.simpleLinear-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color)}"],changeDetection:0})}return n})();var bi=(()=>{class n{metaWidget=x();dataService=A(st);destroyRef=A(Ie);_metaConfig=w(void 0);_meta=w(null);reset$=new Zt;currentSub;pathSignature;zones=L(()=>this._meta()?.zones||[]);possibleValues=L(()=>this._meta()?.possibleValues||[]);supportsPut=L(()=>this._meta()?.supportsPut||!1);observe(e){let t=this._metaConfig();if(!t?.paths||Object.keys(t.paths).length===0)return;let i=e??Object.keys(t.paths)[0],o=t.paths[i]?.path;if(!o)return;let r=o;this.pathSignature!==r&&(this.pathSignature=r,this.subscribePathMeta(o))}subscribePathMeta(e){this.currentSub&&(this.currentSub.unsubscribe(),this.currentSub=void 0);let t=this.dataService.getPathMetaObservable(e).pipe(qr(this.reset$),De(this.destroyRef)).subscribe(i=>{this._meta.set(i)});this.currentSub=t}setMetaConfig(e){this._metaConfig.set(e)}applyMetaConfigDiff(e){this._metaConfig.set(e),this.pathSignature&&this.observe()}reset(){this.reset$.next(),this.reset$.complete(),this.reset$=new Zt,this.currentSub&&(this.currentSub.unsubscribe(),this.currentSub=void 0),this.pathSignature=void 0,this._meta.set(null)}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["","widget-metadata",""]],inputs:{metaWidget:[1,"metaWidget"]},exportAs:["widgetMetadata"]})}return n})();function ko(n,a,e,t,i,o,r=!1){let s=[],l=[...n].sort((m,h)=>(m.lower??-1/0)-(h.lower??-1/0));for(let m of l){let h=null,v=null,y;switch(m.state){case J.Emergency:y=a.zoneEmergency;break;case J.Alarm:y=a.zoneAlarm;break;case J.Warn:y=a.zoneWarn;break;case J.Alert:y=a.zoneAlert;break;case J.Nominal:y=a.zoneNominal;break;default:y="rgba(0,0,0,0)"}if(m.lower==null?h=i:h=t.convertToUnit(e,m.lower),m.upper==null?v=o:v=t.convertToUnit(e,m.upper),!(!Number.isFinite(h)||!Number.isFinite(v))&&!(v<i||h>o)){if(h=Math.max(h,i),v>o){v=o,s.push({from:h,to:v,color:y});break}s.push({from:h,to:v,color:y})}}return r&&(s=s.map(m=>({from:o-m.to,to:o-m.from,color:m.color}))),s}var rh=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Gauge Label",filterSelfPaths:!0,paths:{gaugePath:{description:"Numeric Data",path:null,source:null,pathType:"number",isPathConfigurable:!0,showPathSkUnitsFilter:!0,pathSkUnitsFilter:"V",convertUnitTo:"V",sampleTime:500}},displayScale:{lower:0,upper:15,type:"linear"},gauge:{type:"simpleLinear",unitLabelFormat:"full"},numInt:1,numDecimal:2,ignoreZones:!1,color:"contrast",enableTimeout:!1,dataTimeout:5};runtime=A(xe);streams=A(Be);metadata=A(bi,{optional:!0});unitsService=A(He);unitsLabel=w("");dataLabelValue=w("0");dataValue=w(null);barColor=w("");barColorGradient=w("");barColorBackground=w("");highlights=L(()=>{let e=this.runtime.options(),t=this.theme();if(!e||!t)return[];if(e.ignoreZones||!this.metadata)return[];let i=this.metadata.zones();if(!i?.length)return[];let o=e.paths.gaugePath.convertUnitTo,r=e.displayScale.lower,s=e.displayScale.upper;return ko(i,t,o,this.unitsService,r,s)});lastState=null;constructor(){W(()=>{let e=this.runtime.options(),t=e?.paths?.gaugePath?.path;!e||!t||z(()=>{this.streams.observe("gaugePath",o=>{let r=this.theme();if(!e||!r)return;let s=o?.data?.value;if(s==null)this.dataValue.set(e.displayScale.lower),this.dataLabelValue.set("--");else{let l=Math.min(Math.max(s,e.displayScale.lower),e.displayScale.upper);this.dataValue.set(l),this.dataLabelValue.set(l.toFixed(e.numDecimal))}if(!e.ignoreZones){let l=o?.state;if(l&&l!==this.lastState)switch(this.lastState=l,l){case J.Alarm:this.barColor.set(r.zoneAlarm);break;case J.Warn:this.barColor.set(r.zoneWarn);break;case J.Alert:this.barColor.set(r.zoneAlert);break;case J.Nominal:this.barColor.set(r.zoneNominal);break;default:this.barColor.set(Ce(e.color,r).color);break}}});let i=e.paths.gaugePath.convertUnitTo;this.unitsLabel.set(e.gauge.unitLabelFormat==="abr"?i?.substring(0,1):i)})}),W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{this.barColorBackground.set(t.background);let i=Ce(e.color,t);if(e.ignoreZones)this.barColor.set(i.color);else if(this.lastState)switch(this.lastState){case J.Alarm:this.barColor.set(t.zoneAlarm);break;case J.Warn:this.barColor.set(t.zoneWarn);break;case J.Alert:this.barColor.set(t.zoneAlert);break;case J.Nominal:this.barColor.set(t.zoneNominal);break;default:this.barColor.set(i.color);break}else this.barColor.set(i.color);this.barColorGradient.set(i.dimmer||i.dim||i.color)})}),W(()=>{let e=this.runtime.options();!e||e.ignoreZones||!this.metadata||z(()=>this.metadata.observe("gaugePath"))})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-simple-linear"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:1,vars:11,consts:[[1,"simpleLinearGaugeContainer",3,"displayName","displayNameColor","unitLabel","dataValue","dataValueLabel","barColor","barColorGradient","barColorBackground","gaugeMaxValue","gaugeMinValue","highlights"]],template:function(t,i){if(t&1&&O(0,"svg-simple-linear-gauge",0),t&2){let o,r=i.runtime.options();R("displayName",r.displayName)("displayNameColor",(o=i.theme())==null?null:o.contrastDim)("unitLabel",i.unitsLabel())("dataValue",i.dataValue())("dataValueLabel",i.dataLabelValue())("barColor",i.barColor())("barColorGradient",i.barColorGradient())("barColorBackground",i.barColorBackground())("gaugeMaxValue",r.displayScale.upper)("gaugeMinValue",r.displayScale.lower)("highlights",i.highlights())}},dependencies:[oh],styles:[".simpleLinearGaugeContainer[_ngcontent-%COMP%]{display:block;position:relative;height:100%;width:100%;padding:0}"],changeDetection:0})}return n})();var jy=["rotatingDial"],Yy=["twaIndicator"],Ky=["wptIndicator"],Xy=["setIndicator"],Zy=["tackIndicator"],sh=([n,a],[e,t],[i,o])=>(Math.atan2(o-t,i-e)-Math.atan2(a-t,n-e)+3*Math.PI)%(2*Math.PI)-Math.PI,lh=(()=>{class n{rotatingDial=he.required("rotatingDial");twaIndicator=he.required("twaIndicator");wptIndicator=he.required("wptIndicator");setIndicator=he.required("setIndicator");tackIndicator=he.required("tackIndicator");compassHeading=x.required();tackTrue=x.required();polarSpeedRatio=x.required();trueWindAngle=x.required();trueWindSpeed=x.required();targetAngle=x.required();optimalWindAngle=x.required();targetVMG=x.required();VMG=x.required();sailSetupEnabled=x.required();driftEnabled=x.required();driftSet=x(void 0);driftFlow=x(void 0);waypointEnabled=x.required();waypointAngle=x(void 0);vmgToWaypoint=x(void 0);trueWindMinHistoric=x(void 0);trueWindMidHistoric=x(void 0);trueWindMaxHistoric=x(void 0);gradianColor=x.required();compass={oldValue:0,newValue:0};twa={oldValue:0,newValue:0};wpt={oldValue:0,newValue:0};tack={oldValue:0,newValue:0};set={oldValue:0,newValue:0};compassInitialized=!1;twaInitialized=!1;wptInitialized=!1;tackInitialized=!1;setInitialized=!1;laylinesInitialized=!1;headingValue=w("--");windSectorsInitialized=!1;trueWindHeading=0;nextTargetDirection=L(()=>{let e=this.compassHeading(),t=this.tackTrue();return e==null||t==null?0:this.unsignedAngleDelta(e,t)});trueWindSpeedDisplay=L(()=>{let e=this.trueWindSpeed();return e==null?"--":e.toFixed(1)});windAnglePerformanceRatioColor=L(()=>{let e=this.optimalWindAngle(),t=this.targetAngle(),i=this.gradianColor().start,o=this.gradianColor().stop;if(e==null||t==null)return i;let r=1-Math.abs(e-t)/180;return this.interpolateColor(i,o,r)});targetVMGOffset=L(()=>{let e=this.VMG(),t=this.targetVMG();return e==null||t==null?"--":(e-t).toFixed(1)});targetVMGOffsetRatioColor=L(()=>{let e=this.VMG(),t=this.targetVMG(),i=this.gradianColor().start,o=this.gradianColor().stop;if(e==null||t==null)return i;let r=e/t;return this.interpolateColor(i,o,r)});waypointActive=w(!1);flow=L(()=>{let e=this.driftFlow();return e==null?"--":e.toFixed(1)});portLaylinePrev=0;stbdLaylinePrev=0;portLaylineAnimId=null;stbdLaylineAnimId=null;CENTER_X=600;CENTER_Y=620;RADIUS=540;ANIMATION_DURATION=1e3;laylinePortPath=w(`M ${this.CENTER_X},${this.CENTER_Y} ${this.CENTER_X},${this.CENTER_Y}`);laylineStbdPath=w(`M ${this.CENTER_X},${this.CENTER_Y} ${this.CENTER_X},${this.CENTER_Y}`);portSectorPrev={min:0,mid:0,max:0};stbdSectorPrev={min:0,mid:0,max:0};portSectorAnimId=null;stbdSectorAnimId=null;portWindSectorPath=w("");stbdWindSectorPath=w("");speedLineTipY=w(620);speedTipPoints=w("600,570 580,600 620,600");speedRatioColor=w("");speedLinePrevRatio=0;speedLinePrevTipY=600;speedLineAnimId=null;speedLineInitialized=!1;animationFrameIds=new WeakMap;ngZone=A(Je);setRotationImmediate(e,t){e.setAttribute("transform",`rotate(${t} 600 620)`)}constructor(){W(()=>{let e=this.waypointEnabled();z(()=>{this.waypointActive.set(e)})}),W(()=>{let e=this.compassHeading(),t=Number.isFinite(e)?Math.round(e):null;t!=null&&z(()=>{this.compassInitialized?(this.compass.oldValue=this.compass.newValue,this.compass.newValue=t):(this.compass.oldValue=t,this.compass.newValue=t,this.compassInitialized=!0),this.headingValue.set(t.toString()),this.rotatingDial()?.nativeElement&&(this.compass.oldValue===this.compass.newValue?this.setRotationImmediate(this.rotatingDial().nativeElement,-this.compass.newValue):ai(this.rotatingDial().nativeElement,-this.compass.oldValue,-this.compass.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,[600,620],this.ngZone),this.updateWindSectors())})}),W(()=>{let e=this.targetAngle(),t=Number.isFinite(e)?Math.round(e):null;t!=null&&z(()=>{this.tackInitialized?(this.tack.oldValue=this.tack.newValue,this.tack.newValue=t):(this.tack.oldValue=t,this.tack.newValue=t,this.tackInitialized=!0),this.tackIndicator()?.nativeElement&&(this.tack.oldValue===this.tack.newValue?this.setRotationImmediate(this.tackIndicator().nativeElement,this.tack.newValue):ai(this.tackIndicator().nativeElement,this.tack.oldValue,this.tack.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,[600,620])),this.updateLaylines()})}),W(()=>{let e=this.waypointAngle();z(()=>{if(!e){this.waypointActive.set(!1);return}this.waypointEnabled()?this.waypointActive.set(!0):this.waypointActive.set(!1),this.wptInitialized?(this.wpt.oldValue=this.wpt.newValue,this.wpt.newValue=e):(this.wpt.oldValue=e,this.wpt.newValue=e,this.wptInitialized=!0),this.wptIndicator()?.nativeElement&&(this.wpt.oldValue===this.wpt.newValue?this.setRotationImmediate(this.wptIndicator().nativeElement,this.wpt.newValue):ai(this.wptIndicator().nativeElement,this.wpt.oldValue,this.wpt.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,[600,620]))})}),W(()=>{let e=this.trueWindAngle(),t=Number.isFinite(e)?Math.round(e):null,i=this.compassHeading(),o=Number.isFinite(i)?Math.round(i):null;t==null||o==null||z(()=>{this.trueWindHeading=t;let r=this.addHeading(this.trueWindHeading,o*-1);this.twaInitialized?(this.twa.oldValue=this.twa.newValue,this.twa.newValue=r):(this.twa.oldValue=r,this.twa.newValue=r,this.twaInitialized=!0),this.twaIndicator()?.nativeElement&&(this.twa.oldValue===this.twa.newValue?this.setRotationImmediate(this.twaIndicator().nativeElement,this.twa.newValue):ai(this.twaIndicator().nativeElement,this.twa.oldValue,this.twa.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,[600,620],this.ngZone),this.updateLaylines())})}),W(()=>{let e=this.polarSpeedRatio(),t=Math.max(0,Math.min(1,e)),i=620,r=i-166,s=i-r*t;if(!this.speedLineInitialized){this.speedLineInitialized=!0,this.speedLineTipY.set(s);let l=30,m=20,h=s-l;this.speedTipPoints.set(`600,${h} ${600-m},${s} ${600+m},${s}`),this.speedRatioColor.set(this.interpolateColor(this.gradianColor().start,this.gradianColor().stop,t)),this.speedLinePrevTipY=s,this.speedLinePrevRatio=t;return}this.animateSpeedLine(this.speedLinePrevTipY,s),this.speedLinePrevTipY=s,this.speedLinePrevRatio=t}),W(()=>{let e=this.driftSet(),t=Number.isFinite(e)?Math.round(e):null;t!=null&&z(()=>{this.setInitialized?(this.set.oldValue=this.set.newValue,this.set.newValue=t):(this.set.oldValue=t,this.set.newValue=t,this.setInitialized=!0),this.setIndicator()?.nativeElement&&(this.set.oldValue===this.set.newValue?this.setRotationImmediate(this.setIndicator().nativeElement,this.set.newValue):ai(this.setIndicator().nativeElement,this.set.oldValue,this.set.newValue,this.ANIMATION_DURATION,void 0,this.animationFrameIds,[600,620],this.ngZone))})})}updateLaylines(){if(!this.twaInitialized)return;let e=this.targetAngle(),t=Number.isFinite(e)?Math.round(e):null;if(t==null)return;t=t/2;let i=Number(this.twa.newValue),o=i-t,r=i+t;if(!this.laylinesInitialized){this.laylinesInitialized=!0,this.setLaylinePath(o,!0),this.setLaylinePath(r,!1),this.portLaylinePrev=o,this.stbdLaylinePrev=r;return}this.animateLayline(this.portLaylinePrev,o,!0),this.portLaylinePrev=o,this.animateLayline(this.stbdLaylinePrev,r,!1),this.stbdLaylinePrev=r}animateLayline(e,t,i){i&&this.portLaylineAnimId&&cancelAnimationFrame(this.portLaylineAnimId),!i&&this.stbdLaylineAnimId&&cancelAnimationFrame(this.stbdLaylineAnimId);let o=()=>{i?this.portLaylineAnimId=null:this.stbdLaylineAnimId=null},r=Ls(e,t,this.ANIMATION_DURATION,s=>this.setLaylinePath(s,i),o,this.ngZone);i?this.portLaylineAnimId=r:this.stbdLaylineAnimId=r}updateWindSectors(){if(this.trueWindMinHistoric()==null||this.trueWindMidHistoric()==null||this.trueWindMaxHistoric()==null)return;let e={min:this.trueWindMinHistoric(),mid:this.trueWindMidHistoric(),max:this.trueWindMaxHistoric()},t={min:this.trueWindMinHistoric(),mid:this.trueWindMidHistoric(),max:this.trueWindMaxHistoric()};if(!this.windSectorsInitialized){this.portSectorPrev=e,this.stbdSectorPrev=t,this.windSectorsInitialized=!0,this.animateWindSector(e,e,!0),this.animateWindSector(t,t,!1);return}this.animateWindSector(this.portSectorPrev,e,!0),this.animateWindSector(this.stbdSectorPrev,t,!1),this.portSectorPrev=e,this.stbdSectorPrev=t}animateWindSector(e,t,i){i&&this.portSectorAnimId&&cancelAnimationFrame(this.portSectorAnimId),!i&&this.stbdSectorAnimId&&cancelAnimationFrame(this.stbdSectorAnimId);let o=()=>{i?this.portSectorAnimId=null:this.stbdSectorAnimId=null},r=Ws(e,t,this.ANIMATION_DURATION,s=>this.setWindSectorPath(s,i),o,this.ngZone);i?this.portSectorAnimId=r:this.stbdSectorAnimId=r}animateSpeedLine(e,t){this.speedLineAnimId&&(cancelAnimationFrame(this.speedLineAnimId),this.speedLineAnimId=null);let i=1e3,o=performance.now(),r=this.speedLinePrevRatio,s=(600-t)/454,l=h=>h<.5?4*h*h*h:1-Math.pow(-2*h+2,3)/2,m=h=>{let v=h-o,y=Math.min(v/i,1),C=l(y),S=(j,B)=>j+(B-j)*C,_=S(e,t),F=S(r,s);this.speedLineTipY.set(_);let E=30,N=20,U=_-E;this.speedTipPoints.set(`600,${U} ${600-N},${_} ${600+N},${_}`),this.speedRatioColor.set(this.interpolateColor(this.gradianColor().start,this.gradianColor().stop,F)),y<1?this.speedLineAnimId=requestAnimationFrame(m):this.speedLineAnimId=null};requestAnimationFrame(m)}interpolateColor(e,t,i){i=Math.max(0,Math.min(1,i));function o(_){_=_.replace("#",""),_.length===3&&(_=_.split("").map(E=>E+E).join(""));let F=parseInt(_,16);return[F>>16&255,F>>8&255,F&255]}let[r,s,l]=o(e),[m,h,v]=o(t),y=Math.round(r+(m-r)*i),C=Math.round(s+(h-s)*i),S=Math.round(l+(v-l)*i);return`rgb(${y},${C},${S})`}addHeading(e=0,t=0){return((e+t)%360+360)%360}unsignedAngleDelta(e,t){let i=(e-t+540)%360-180;return Math.abs(i)}normalizeAngle(e){return(e%360+360)%360}setLaylinePath(e,t){let i=this.normalizeAngle(e)*Math.PI/180,o=Math.floor(this.RADIUS*Math.sin(i)+this.CENTER_X),r=Math.floor(this.RADIUS*Math.cos(i)*-1+this.CENTER_Y);t?this.laylinePortPath.set(`M ${this.CENTER_X},${this.CENTER_Y} L ${o},${r}`):this.laylineStbdPath.set(`M ${this.CENTER_X},${this.CENTER_Y} L ${o},${r}`)}setWindSectorPath(e,t){let i=this.addHeading(this.addHeading(e.min,Number(this.compass.newValue)*-1),this.targetAngle()/2*(t?-1:1)),o=this.addHeading(this.addHeading(e.mid,Number(this.compass.newValue)*-1),this.targetAngle()/2*(t?-1:1)),r=this.addHeading(this.addHeading(e.max,Number(this.compass.newValue)*-1),this.targetAngle()/2*(t?-1:1)),s=this.RADIUS*Math.sin(i*Math.PI/180)+this.CENTER_X,l=this.RADIUS*Math.cos(i*Math.PI/180)*-1+this.CENTER_Y,m=this.RADIUS*Math.sin(o*Math.PI/180)+this.CENTER_X,h=this.RADIUS*Math.cos(o*Math.PI/180)*-1+this.CENTER_Y,v=this.RADIUS*Math.sin(r*Math.PI/180)+this.CENTER_X,y=this.RADIUS*Math.cos(r*Math.PI/180)*-1+this.CENTER_Y,C=Math.abs(sh([s,l],[m,h],[v,y]))>Math.PI/2?0:1,S=sh([v,y],[s,l],[m,h])>0?0:1,_=`M ${this.CENTER_X},${this.CENTER_Y} L ${s},${l} A ${this.RADIUS},${this.RADIUS} 0 ${C} ${S} ${v},${y} z`;t?this.portWindSectorPath.set(_):this.stbdWindSectorPath.set(_)}ngOnDestroy(){this.portLaylineAnimId&&cancelAnimationFrame(this.portLaylineAnimId),this.stbdLaylineAnimId&&cancelAnimationFrame(this.stbdLaylineAnimId),this.portLaylineAnimId=null,this.stbdLaylineAnimId=null,this.portSectorAnimId&&cancelAnimationFrame(this.portSectorAnimId),this.stbdSectorAnimId&&cancelAnimationFrame(this.stbdSectorAnimId),this.portSectorAnimId=null,this.stbdSectorAnimId=null;let e=[this.rotatingDial(),this.twaIndicator(),this.wptIndicator(),this.setIndicator()];for(let t of e){let i=t?.nativeElement;if(!i)continue;let o=this.animationFrameIds.get(i);o&&cancelAnimationFrame(o),this.animationFrameIds.delete(i)}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["svg-racesteer"]],viewQuery:function(t,i){t&1&&_e(i.rotatingDial,jy,5)(i.twaIndicator,Yy,5)(i.wptIndicator,Ky,5)(i.setIndicator,Xy,5)(i.tackIndicator,Zy,5),t&2&&Me(5)},inputs:{compassHeading:[1,"compassHeading"],tackTrue:[1,"tackTrue"],polarSpeedRatio:[1,"polarSpeedRatio"],trueWindAngle:[1,"trueWindAngle"],trueWindSpeed:[1,"trueWindSpeed"],targetAngle:[1,"targetAngle"],optimalWindAngle:[1,"optimalWindAngle"],targetVMG:[1,"targetVMG"],VMG:[1,"VMG"],sailSetupEnabled:[1,"sailSetupEnabled"],driftEnabled:[1,"driftEnabled"],driftSet:[1,"driftSet"],driftFlow:[1,"driftFlow"],waypointEnabled:[1,"waypointEnabled"],waypointAngle:[1,"waypointAngle"],vmgToWaypoint:[1,"vmgToWaypoint"],trueWindMinHistoric:[1,"trueWindMinHistoric"],trueWindMidHistoric:[1,"trueWindMidHistoric"],trueWindMaxHistoric:[1,"trueWindMaxHistoric"],gradianColor:[1,"gradianColor"]},decls:174,vars:39,consts:[["rotatingDial",""],["tackIndicator",""],["twaIndicator",""],["wptIndicator",""],["setIndicator",""],["viewBox","0 0 1200 1200"],["id","defs1"],["id","linearGradient18"],["offset","0",1,"boat",2,"stop-opacity","0.71372495"],["offset","1",1,"boat",2,"stop-opacity","0"],["id","linearGradient16"],["id","linearGradient13"],["offset","0.41176471",1,"drift-arrow",2,"stop-opacity","1"],["offset","1",1,"drift-arrow",2,"stop-opacity","0"],["id","swatch4"],["offset","0","id","stop4",2,"stop-color","#000000","stop-opacity","1"],["clipPathUnits","userSpaceOnUse","id","clipPath16"],["id","ellipse16","cx","311.24539","cy","-1516.3778","rx","194.27342","ry","181.83022",2,"display","inline","fill","#9a9300","fill-opacity","1","stroke","none","stroke-width","55","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],["id","linearGradient14",0,"xlink","href","#linearGradient13","x1","453.48047","y1","583.62891","x2","638.11328","y2","583.62891","gradientUnits","userSpaceOnUse","gradientTransform","matrix(0.00723393,1.2388183,-1.0538241,0.00615367,1211.2051,-79.73465)"],["id","linearGradient17",0,"xlink","href","#linearGradient16","x1","-502.04896","y1","439.35551","x2","-316","y2","439.35551","gradientUnits","userSpaceOnUse","gradientTransform","translate(0,49.000266)"],["id","linearGradient19",0,"xlink","href","#linearGradient18","x1","495.83999","y1","439.35551","x2","681.88895","y2","439.35551","gradientUnits","userSpaceOnUse","gradientTransform","translate(0,49.000266)"],["id","layerBackground","transform","translate(100,100)",2,"display","inline"],["id","boat",2,"display","inline"],["id","portSide","d","M 498.75049,208.89453 A 267.09439,554.67401 0 0 1 678.45974,767.81661",2,"fill","none","fill-opacity","1","stroke","url(#linearGradient19)","stroke-width","5.821","stroke-linecap","round","stroke-miterlimit","0","stroke-dasharray","none"],["id","starboardSide","d","m -499.13846,208.89453 a 267.09439,554.67401 0 0 1 179.70925,558.92208","transform","scale(-1,1)",2,"fill","none","fill-opacity","1","stroke","url(#linearGradient17)","stroke-width","5.821","stroke-linecap","round","stroke-miterlimit","0","stroke-dasharray","none"],["id","layerCompass"],["id","fixedDial"],["id","dialBackground","cx","600","cy","620","r","516",1,"fixed-dial-background",2,"display","inline","stroke-width","46"],["id","barsAndText","transform","scale(1.1) translate(45,64)",1,"contrast-stroke",2,"display","inline"],["d","m 416.35095,19.837399 2.78142,15.77426","id","path199",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 334.23173,41.658798 5.47834,15.051615","id","path200",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 260.27336,81.806174 12.55151,21.739856","id","path37",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 187.44581,126.00035 10.29591,12.2702","id","path197",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 127.23918,185.95785 12.27019,10.29591","id","path198",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 83.252815,257.66724 21.739865,12.55151","id","path166",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 42.289518,332.39273 15.05162,5.47835","id","path195",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 20.127799,414.42077 15.774251,2.78142","id","path196",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 17.879075,498.47765 H 42.982096","id","path167",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 19.776759,583.71187 15.77426,-2.78142","id","path193",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 41.598167,665.8311 15.051615,-5.47834","id","path194",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 81.668963,739.71246 103.40883,727.16095","id","path168",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 125.93981,812.61701 12.2702,-10.29591","id","path191",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 185.89732,872.82365 10.29591,-12.27019","id","path192",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 257.53004,916.73298 12.55151,-21.73985","id","path169",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 332.33219,957.7732 5.47835,-15.05162","id","path189",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 414.36024,979.93493 2.78142,-15.77425","id","path190",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 498.34046,982.10672 V 957.0037","id","path170",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 583.65133,980.28596 580.86991,964.5117","id","path187",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 665.77057,958.46456 -5.47834,-15.05161","id","path188",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 739.57526,918.31683 727.02375,896.57698","id","path171",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 812.55647,874.12301 802.26056,861.85282","id","path185",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 872.76312,814.16551 860.49293,803.8696","id","path186",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 916.59579,742.45577 894.85593,729.90426","id","path172",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 957.71266,667.73063 -15.05161,-5.47834","id","path183",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 979.8744,585.70259 -15.77425,-2.78142","id","path184",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 981.96954,501.64535 -25.10304,10e-6","id","path173",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 980.22542,416.41149 -15.77425,2.78143","id","path181",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 958.40403,334.29226 -15.05161,5.47834","id","path182",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 918.17964,260.41055 -21.73986,12.55151","id","path174",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 874.06247,187.50636 -12.27018,10.29591","id","path180",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 817.34594,130.05494 -10.40259,12.17987","id","path179",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 742.31857,83.390025 729.76706,105.12988","id","path175",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 667.6701,42.350172 -5.47834,15.051615","id","path178",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 585.64206,20.188432 -2.78142,15.77425","id","path176",2,"fill","none","fill-opacity","0","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 501.50816,18.016286 V 43.119307","id","path177",2,"fill","none","fill-opacity","0","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],[0,"xml","space","preserve","x","181.91386","y","284.25186","id","text3","transform","rotate(-30)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan3","x","181.91386","y","284.25186",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-183.53558","y","283.74811","id","text14","transform","rotate(-60)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan14","x","-183.53558","y","283.74811",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-499.70761","y","100.95312","id","text15","transform","rotate(-90)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan15","x","-499.70761","y","100.95312",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-681.66119","y","-216.36243","id","text16","transform","rotate(-120)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["x","-681.66119","y","-216.36243","id","tspan25",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-681.06616","y","-581.71271","id","text17","transform","rotate(-150)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan17","x","-681.06616","y","-581.71271",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-498.3313","y","-897.40875","id","text18","transform","scale(-1)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan18","x","-498.3313","y","-897.40875",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-184.41313","y","-1080.8452","id","text19","transform","rotate(150)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan19","x","-184.41313","y","-1080.8452",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","181.57225","y","-1080.8853","id","text20","transform","rotate(120)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan20","x","181.57225","y","-1080.8853",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","501.42661","y","-896.93701","id","text21","transform","rotate(90)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan21","x","501.42661","y","-896.93701",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","682.35815","y","-579.63336","id","text22","transform","rotate(60)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan22","x","682.35815","y","-579.63336",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","681.81525","y","-214.27321","id","text23","transform","rotate(30)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan23","x","681.81525","y","-214.27321",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","500.15503","y","101.96342","id","text24",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan24","x","500.15503","y","101.96342",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],["id","LayerWindShift"],["id","portSectorShift",1,"wind-sector-port",2,"fill-opacity","0.4","stroke","none"],["id","StbdSectorShift",1,"wind-sector-stbd",2,"fill-opacity","0.4","stroke","none"],["id","LayerLayline"],["id","PortLayline",1,"portLayline"],["id","StbdLayline",1,"stbdLayline"],["id","layerCounter"],["id","tackCounter"],[0,"xml","space","preserve","x","1062","y","80",1,"tack-label"],["x","936","y","95","width","252","height","100","rx","20",1,"tack-box"],[0,"xml","space","preserve","x","1072","y","175","id","text42",1,"tack-value"],[2,"font-weight","normal"],["id","windVmgCounter"],[0,"xml","space","preserve","x","600","y","780",1,"tack-label"],[0,"xml","space","preserve","x","610","y","850",1,"wind-vmg-value"],[2,"font-weight","normal","font-size","30px"],[0,"xml","space","preserve","x","610","y","890",1,"wind-vmg-offset"],["id","waypointCounter"],[0,"xml","space","preserve","x","1062","y","1030",1,"tack-label"],["x","936","y","1045","width","252","height","140","rx","20",1,"waypoint-box"],[0,"xml","space","preserve","x","1060","y","1100",1,"waypoint-value"],[1,"tack-label"],[0,"xml","space","preserve","x","1060","y","1165",1,"waypoint-value"],["id","layerIndicators",2,"display","inline"],["d","m 606.20767,217.99458 a 6.3888631,8.8250643 0 0 1 -6.38888,8.82508 6.3888631,8.8250643 0 0 1 -6.38888,-8.82508 6.3888631,8.8250643 0 0 1 6.38888,-8.82509 6.3888631,8.8250643 0 0 1 6.38888,8.82509 z M 576.25472,75.811298 593.47058,58.265068 c 3.6173,-3.6867571 9.44162,-3.6867571 13.05892,0 l 17.21586,17.546106 c 3.6173,3.686743 3.6173,9.622786 0,13.309544 l -17.21595,17.54623 c -3.61721,3.686757 -9.44153,3.686757 -13.05893,0 L 576.25472,89.120841 c -3.6174,-3.686743 -3.6174,-9.622924 0,-13.309543 z m 17.20533,-16.510116 h 12.77766 V 218.26408 h -12.77766 z",1,"tack-angle"],["d","m 451.77021,5.469207 42.08541,-33.202814 a 12.555638,12.555638 0.26446337 0 1 15.64423,0.07221 l 42.20046,33.930296 a 15.557694,15.557694 71.53185 0 1 5.32954,15.957795 L 504.17034,230.15629 a 2.5373267,2.5373267 0.02614114 0 1 -4.91879,-0.002 L 446.37431,21.357036 a 15.416336,15.416336 108.75875 0 1 5.3959,-15.887829 z","transform","matrix(0.60410307,0,0,0.70555435,296.91787,121.152867)",1,"true-wind",2,"display","inline","stroke","none","stroke-width","5.8876","stroke-miterlimit","0"],[0,"xml","space","preserve","x","600","y","210","id","text10",1,"card-color",2,"font-weight","bold","font-size","60px","font-family","Roboto","text-align","center","text-anchor","middle","display","inline","stroke","none"],["cx","600","cy","225","rx","23","ry","23",1,"next-waypoint"],["id","layerDirectionSpeed"],["id","directionLine","x1","600","y1","620","x2","600","y2","110",1,"direction-line"],["id","speedLine","x1","600","y1","620","x2","600",1,"speed-line"],["id","speedTip",1,"speed-line"],["id","layerDrift","transform","translate(0, 20)"],["id","setArrow","d","m 663.93337,580.60403 -64.4901,-94.9673 -63.37665,95.71396 58.48691,-30.71299 0.77713,133.08346 c 0.0992,16.99331 2.52916,30.65913 5.44822,30.64209 2.91911,-0.0171 5.18926,-13.71032 5.09001,-30.70362 l -0.77782,-133.20444 z",1,"drift-arrow",2,"fill","url(#linearGradient14)"],["id","text11",0,"xml","space","preserve","x","599.78842","y","623.55145",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-stretch","normal","font-size","66.6667px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],["id","layerHeading"],["id","rect1","width","310","height","117","x","445","y","10","rx","20",1,"heading-box",2,"stroke-width","5","stroke-opacity","0.5"],["x","600","y","110",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","120px","font-family","Roboto","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none","stroke-width","5","stroke-linejoin","bevel","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],[2,"font-weight","normal","font-size","60px"]],template:function(t,i){t&1&&(oe(),D(0,"svg",5)(1,"defs",6)(2,"linearGradient",7),ee(3,"stop",8)(4,"stop",9),G(),D(5,"linearGradient",10),ee(6,"stop",8)(7,"stop",9),G(),D(8,"linearGradient",11),ee(9,"stop",12)(10,"stop",13),G(),D(11,"linearGradient",14),ee(12,"stop",15),G(),D(13,"clipPath",16),ee(14,"ellipse",17),G(),ee(15,"linearGradient",18)(16,"linearGradient",19)(17,"linearGradient",20),G(),D(18,"g",21)(19,"g",22),ee(20,"path",23)(21,"path",24),G()(),D(22,"g",25)(23,"g",26),ee(24,"circle",27),G(),D(25,"g",null,0)(27,"g",28),ee(28,"path",29)(29,"path",30)(30,"path",31)(31,"path",32)(32,"path",33)(33,"path",34)(34,"path",35)(35,"path",36)(36,"path",37)(37,"path",38)(38,"path",39)(39,"path",40)(40,"path",41)(41,"path",42)(42,"path",43)(43,"path",44)(44,"path",45)(45,"path",46)(46,"path",47)(47,"path",48)(48,"path",49)(49,"path",50)(50,"path",51)(51,"path",52)(52,"path",53)(53,"path",54)(54,"path",55)(55,"path",56)(56,"path",57)(57,"path",58)(58,"path",59)(59,"path",60)(60,"path",61)(61,"path",62)(62,"path",63)(63,"path",64),D(64,"text",65)(65,"tspan",66),c(66,"330"),G()(),D(67,"text",67)(68,"tspan",68),c(69,"300"),G()(),D(70,"text",69)(71,"tspan",70),c(72,"W"),G()(),D(73,"text",71)(74,"tspan",72),c(75,"240"),G()(),D(76,"text",73)(77,"tspan",74),c(78,"210"),G()(),D(79,"text",75)(80,"tspan",76),c(81,"S"),G()(),D(82,"text",77)(83,"tspan",78),c(84,"150"),G()(),D(85,"text",79)(86,"tspan",80),c(87,"120"),G()(),D(88,"text",81)(89,"tspan",82),c(90,"E"),G()(),D(91,"text",83)(92,"tspan",84),c(93,"60"),G()(),D(94,"text",85)(95,"tspan",86),c(96,"30"),G()(),D(97,"text",87)(98,"tspan",88),c(99,"N"),G()()()()(),D(100,"g",89),ee(101,"path",90)(102,"path",91),G(),D(103,"g",92),ee(104,"path",93)(105,"path",94),G(),D(106,"g",95)(107,"g",96)(108,"text",97),c(109,"Tack/Gybe"),G(),ee(110,"rect",98),D(111,"text",99),c(112),ut(113,"number"),D(114,"tspan",100),c(115,"\xB0"),G()()(),D(116,"g",101)(117,"text",102),c(118,"Wind VMG"),G(),D(119,"text",103),c(120),D(121,"tspan",104),c(122," kts"),G()(),D(123,"text",105),c(124),D(125,"tspan",104),c(126," kts"),G()()(),D(127,"g",106)(128,"text",107),c(129,"Waypoint"),G(),ee(130,"rect",108),D(131,"text",109)(132,"tspan",110),c(133,"VMG: "),G(),c(134),D(135,"tspan",104),c(136," kts"),G()(),D(137,"text",111)(138,"tspan",110),c(139,"HDG: "),G(),c(140),D(141,"tspan",100),c(142,"\xB0"),D(143,"tspan",104),c(144,"T"),G()()()()(),D(145,"g",112)(146,"g",null,1),ee(148,"path",113),G(),D(149,"g",null,2),ee(151,"path",114),D(152,"text",115),c(153,"T"),G()(),D(154,"g",null,3),ee(156,"ellipse",116),G()(),D(157,"g",117),ee(158,"line",118)(159,"line",119)(160,"polygon",120),G(),D(161,"g",121),ee(162,"path",122,4),D(164,"text",123),c(165),G()(),D(166,"g",124),ee(167,"rect",125),D(168,"text",126),c(169),D(170,"tspan",100),c(171,"\xB0"),D(172,"tspan",127),c(173,"T"),G()()()()()),t&2&&(f(101),Te("display",i.portWindSectorPath()!="none"?"inline":"none"),ie("d",i.portWindSectorPath()),f(),Te("display",i.stbdWindSectorPath()!="none"?"inline":"none"),ie("d",i.stbdWindSectorPath()),f(2),Te("display",i.trueWindAngle()!=null?"inline":"none"),ie("d",i.laylinePortPath()),f(),Te("display",i.trueWindAngle()!=null?"inline":"none"),ie("d",i.laylineStbdPath()),f(7),be("",In(113,36,i.nextTargetDirection(),"1.0-0")," "),f(7),Te("fill",i.targetVMGOffsetRatioColor()),f(),Q(i.targetVMG()),f(3),Te("fill",i.targetVMGOffsetRatioColor()),f(),Q(i.targetVMGOffset()),f(10),Q(i.vmgToWaypoint()),f(6),Q(i.waypointAngle()),f(11),Te("fill",i.windAnglePerformanceRatioColor()),f(3),ie("display",i.waypointActive()?"inline":"none"),f(5),Te("stroke",i.speedRatioColor()),ie("y2",i.speedLineTipY()),f(),Te("fill",i.speedRatioColor())("stroke",i.speedRatioColor()),ie("points",i.speedTipPoints()),f(),Te("display",i.driftEnabled()?"inline":"none"),f(4),Q(i.flow()),f(4),be(" ",i.headingValue()))},dependencies:[io],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}svg[_ngcontent-%COMP%]{position:absolute;height:100%;width:100%;left:0;top:0}.fixed-dial-background[_ngcontent-%COMP%]{fill:none;stroke:var(--kip-grey-color)}.rotating-dial-Backplate[_ngcontent-%COMP%]{fill:var(--mat-sys-background)}.starboard[_ngcontent-%COMP%]{stroke:var(--kip-starboard-color)}.port[_ngcontent-%COMP%]{stroke:var(--kip-port-color)}.heading-box[_ngcontent-%COMP%]{stroke:var(--kip-grey-color);fill:var(--kip-widget-card-background-color)}.boat[_ngcontent-%COMP%]{stop-color:var(--kip-grey-color)!important}.contrast-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color)}.contrast-stroke[_ngcontent-%COMP%]{stroke:var(--kip-contrast-color)}.card-color[_ngcontent-%COMP%]{fill:var(--kip-widget-card-background-color)}.tack-box[_ngcontent-%COMP%]{stroke:var(--kip-yellow-dim-color);fill:var(--kip-widget-card-background-color);stroke-width:5}.tack-value[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);font-family:Roboto;font-size:80px;font-style:normal;font-weight:700;text-align:center;text-anchor:middle;stroke:none}.tack-label[_ngcontent-%COMP%]{fill:var(--kip-contrast-dim-color);font-family:Roboto;font-size:35px;font-style:normal;font-weight:700;text-align:center;text-anchor:middle;stroke:none}.waypoint-box[_ngcontent-%COMP%]{stroke:var(--kip-orange-dim-color);fill:var(--kip-widget-card-background-color);stroke-width:5}.waypoint-value[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);font-family:Roboto;font-size:50px;font-style:normal;font-weight:700;text-align:center;text-anchor:middle;stroke:none}.wind-vmg-value[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);font-family:Roboto;font-size:80px;font-style:normal;font-weight:700;text-align:center;text-anchor:middle;stroke:none}.wind-vmg-offset[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);font-family:Roboto;font-size:35px;font-style:normal;font-weight:700;text-align:center;text-anchor:middle;stroke:none}.true-wind[_ngcontent-%COMP%]{fill:var(--kip-blue-color)}.app-wind-label[_ngcontent-%COMP%]{fill:var(--kip-orange-dim-color)}.tack-angle[_ngcontent-%COMP%]{fill:var(--kip-yellow-color);stroke-width:15;stroke-linecap:square}.next-waypoint[_ngcontent-%COMP%]{stroke:var(--kip-orange-color);stroke-width:20;fill:none}.next-waypoint-bar[_ngcontent-%COMP%]{stroke:var(--kip-grey-color)}.portLayline[_ngcontent-%COMP%]{stroke:var(--kip-port-color);stroke-width:5}.stbdLayline[_ngcontent-%COMP%]{stroke:var(--kip-starboard-color);stroke-width:5}.direction-line[_ngcontent-%COMP%]{stroke:var(--kip-contrast-color);stroke-width:5}.speed-line[_ngcontent-%COMP%]{stroke:var(--kip-blue-color);stroke-width:10;fill:var(--kip-blue-color)}.wind-sector-port[_ngcontent-%COMP%]{fill:var(--kip-port-color)}.wind-sector-stbd[_ngcontent-%COMP%]{fill:var(--kip-starboard-color)}.drift-arrow[_ngcontent-%COMP%]{stop-color:var(--kip-blue-color);stroke:var(--kip-widget-card-background-color);stroke-width:3}"],changeDetection:0})}return n})();var dh=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,filterSelfPaths:!0,paths:{headingPath:{description:"True Heading",path:"self.navigation.headingTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},tackTrue:{description:"True Tack",path:"self.performance.tackTrue",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!0,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},polarSpeedRatio:{description:"Polar Speed Ratio",path:"self.performance.polarSpeedRatio",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,convertUnitTo:"ratio",sampleTime:500},targetAngle:{description:"Target Angle",path:"self.performance.targetAngle",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,convertUnitTo:"deg",sampleTime:500},optimalWindAngle:{description:"Optimal Wind Angle",path:"self.performance.optimumWindAngle",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,convertUnitTo:"deg",sampleTime:500},targetVMG:{description:"Target Velocity Made Good",path:"self.performance.targetVelocityMadeGood",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,convertUnitTo:"knots",sampleTime:500},VMG:{description:"Velocity Made Good",path:"self.performance.velocityMadeGood",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,convertUnitTo:"knots",sampleTime:500},appWindAngle:{description:"Apparent Wind Angle",path:"self.environment.wind.angleApparent",source:"default",pathType:"number",isPathConfigurable:!0,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},appWindSpeed:{description:"Apparent Wind Speed",path:"self.environment.wind.speedApparent",source:"default",pathType:"number",isPathConfigurable:!0,pathSkUnitsFilter:"m/s",convertUnitTo:"knots",sampleTime:500},trueWindAngle:{description:"True Wind Angle",path:"self.environment.wind.angleTrueWater",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},trueWindSpeed:{description:"True Wind Speed",path:"self.environment.wind.speedTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,pathSkUnitsFilter:"m/s",convertUnitTo:"knots",sampleTime:500},courseOverGround:{description:"True Course Over Ground",path:"self.navigation.courseOverGroundTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},nextWaypointBearing:{description:"Next Waypoint True Bearing",path:"self.navigation.course.calcValues.bearingTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},vmgToWaypoint:{description:"Velocity Made Good to Waypoint",path:"self.performance.velocityMadeGoodToWaypoint",source:"default",pathType:"number",isPathConfigurable:!1,pathRequired:!1,convertUnitTo:"knots",sampleTime:500},set:{description:"True Drift Set",path:"self.environment.current.setTrue",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:500},drift:{description:"Drift Speed Impact",path:"self.environment.current.drift",source:"default",pathType:"number",isPathConfigurable:!0,pathRequired:!1,pathSkUnitsFilter:"m/s",convertUnitTo:"knots",sampleTime:500}},windSectorEnable:!0,windSectorWindowSeconds:5,laylineEnable:!0,laylineAngle:40,waypointEnable:!0,courseOverGroundEnable:!0,driftEnable:!0,awsEnable:!0,twsEnable:!0,sailSetupEnable:!1,enableTimeout:!1,dataTimeout:5};runtime=A(xe);streams=A(Be);currentHeading=w(0);courseOverGroundAngle=w(0);appWindAngle=w(0);appWindSpeed=w(0);appWindSpeedUnit=w("knots");trueWindAngle=w(0);trueWindSpeed=w(0);trueWindSpeedUnit=w("knots");driftFlow=w(0);driftSet=w(0);waypointAngle=w(0);vmgToWaypoint=w(null);tackTrue=w(0);polarSpeedRatio=w(0);targetAngle=w(0);optimalWindAngle=w(0);targetVMG=w(0);VMG=w(0);gradianColor=w({start:"#3298ff",stop:"#15af00"});trueWindMinHistoric=w(0);trueWindMidHistoric=w(0);trueWindMaxHistoric=w(0);windSectorSub=null;historicalWindDirection=[];constructor(){W(()=>{let e=this.runtime.options();!e||!e.paths?.headingPath?.path||z(()=>this.streams.observe("headingPath",o=>{let r=o?.data?.value;this.currentHeading.set(r??0)}))}),W(()=>{let e=this.runtime.options();!e||!e.courseOverGroundEnable||!e.paths?.courseOverGround?.path||z(()=>this.streams.observe("courseOverGround",o=>{let r=o?.data?.value;this.courseOverGroundAngle.set(r??0)}))}),W(()=>{let e=this.runtime.options();!e||!e.driftEnable||!e.paths?.drift?.path||z(()=>this.streams.observe("drift",o=>{let r=o?.data?.value;this.driftFlow.set(r??0)}))}),W(()=>{let e=this.runtime.options();!e||!e.driftEnable||!e.paths?.set?.path||z(()=>this.streams.observe("set",o=>{let r=o?.data?.value,s=r??0;this.driftSet.set(this.addHeading(-this.currentHeading(),s))}))}),W(()=>{let e=this.runtime.options();!e||!e.waypointEnable||!e.paths?.nextWaypointBearing?.path||z(()=>this.streams.observe("nextWaypointBearing",o=>{let r=o?.data?.value;if(r==null){this.waypointAngle.set(0);return}let s=r<0?360+r:r,l=this.addHeading(-this.currentHeading(),s);this.waypointAngle.set(Math.round(l))}))}),W(()=>{let e=this.runtime.options();!e||!e.awsEnable||!e.paths?.appWindAngle?.path||z(()=>this.streams.observe("appWindAngle",o=>{let r=o?.data?.value,s=r??0;if(s=s<0?360+s:s,this.appWindAngle.set(s),e.windSectorEnable){let l=this.currentHeading(),m=this.addHeading(l,r??0);this.addHistoricalWindDirection(m,e.windSectorWindowSeconds)}}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.tackTrue?.path||z(()=>this.streams.observe("tackTrue",o=>{let r=o?.data?.value;this.tackTrue.set(r==null?0:Math.round(r))}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.polarSpeedRatio?.path||z(()=>this.streams.observe("polarSpeedRatio",o=>{let r=o?.data?.value;this.polarSpeedRatio.set(r??0)}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.targetAngle?.path||z(()=>this.streams.observe("targetAngle",o=>{let r=o?.data?.value;this.targetAngle.set(r)}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.optimalWindAngle?.path||z(()=>this.streams.observe("optimalWindAngle",o=>{let r=o?.data?.value;this.optimalWindAngle.set(r??0)}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.targetVMG?.path||z(()=>this.streams.observe("targetVMG",o=>{let r=o?.data?.value,s=r==null?0:Math.round(r*10)/10;this.targetVMG.set(s)}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.VMG?.path||z(()=>this.streams.observe("VMG",o=>{let r=o?.data?.value,s=r==null?0:Math.round(r*10)/10;this.VMG.set(s)}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.vmgToWaypoint?.path||z(()=>this.streams.observe("vmgToWaypoint",o=>{let r=o?.data?.value,s=r==null?null:Math.round(r*10)/10;this.vmgToWaypoint.set(s)}))}),W(()=>{let e=this.theme();if(!e)return;let t=e?.blue??"#3298ff",i=e?.green??"#15af00";z(()=>this.gradianColor.set({start:t,stop:i}))}),W(()=>{let e=this.runtime.options();!e||!e.awsEnable||!e.paths?.appWindSpeed?.path||z(()=>this.streams.observe("appWindSpeed",o=>{let r=o?.data?.value;this.appWindSpeed.set(r??0)}))}),W(()=>{let e=this.runtime.options();!e||!e.twsEnable||!e.paths?.trueWindSpeed?.path||z(()=>this.streams.observe("trueWindSpeed",o=>{let r=o?.data?.value;this.trueWindSpeed.set(r??0)}))}),W(()=>{let e=this.runtime.options();if(!e||!e.twsEnable)return;let i=e.paths?.trueWindAngle?.path;i&&z(()=>this.streams.observe("trueWindAngle",o=>{let r=o?.data?.value,s=r??0;if(i.includes("angleTrueWater")||i.includes("angleTrueGround")){let l=this.currentHeading();s=this.addHeading(l,s)}else s=s<0?360+s:s;this.trueWindAngle.set(s)}))}),W(()=>{let e=this.runtime.options();e&&(e.windSectorEnable?this.windSectorSub||z(()=>this.windSectorSub=Fr(500).subscribe(()=>this.historicalCleanup(e.windSectorWindowSeconds))):(this.windSectorSub?.unsubscribe(),this.windSectorSub=null))})}sectorArc=L(()=>{let e=this.trueWindMinHistoric(),t=this.trueWindMidHistoric(),i=this.trueWindMaxHistoric();return{min:e,mid:t,max:i}});addHistoricalWindDirection(e,t){this.historicalWindDirection.push({timestamp:Date.now(),windDirection:e});let i=this.arcForAngles(this.historicalWindDirection.map(o=>o.windDirection));this.trueWindMinHistoric.set(i.min),this.trueWindMaxHistoric.set(i.max),this.trueWindMidHistoric.set(i.mid),this.historicalCleanup(t)}arcForAngles(e){return!e||e.length===0?{min:0,max:0,mid:0}:e.slice(1).reduce((i,o)=>{let r=o;for(;r<i.min-180;)r+=360;for(;r>i.max+180;)r-=360;return i.min=Math.min(i.min,r),i.max=Math.max(i.max,r),i.mid=(i.max-i.min)/2+i.min,i},{min:e[0],max:e[0],mid:e[0]})}historicalCleanup(e){let t=Date.now()-e*1e3;this.historicalWindDirection=this.historicalWindDirection.filter(i=>i.timestamp>=t)}addHeading(e,t){let i=(e+t)%360;return i<0&&(i+=360),i}ngOnDestroy(){this.windSectorSub?.unsubscribe(),this.windSectorSub=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-racesteer"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:1,vars:20,consts:[[3,"compassHeading","tackTrue","polarSpeedRatio","trueWindAngle","trueWindSpeed","targetAngle","optimalWindAngle","targetVMG","VMG","sailSetupEnabled","driftEnabled","driftFlow","driftSet","waypointEnabled","waypointAngle","vmgToWaypoint","trueWindMinHistoric","trueWindMidHistoric","trueWindMaxHistoric","gradianColor"]],template:function(t,i){if(t&1&&O(0,"svg-racesteer",0),t&2){let o,r,s;R("compassHeading",i.currentHeading())("tackTrue",i.tackTrue())("polarSpeedRatio",i.polarSpeedRatio())("trueWindAngle",i.trueWindAngle())("trueWindSpeed",i.trueWindSpeed())("targetAngle",i.targetAngle())("optimalWindAngle",i.optimalWindAngle())("targetVMG",i.targetVMG())("VMG",i.VMG())("sailSetupEnabled",(o=i.runtime.options())==null?null:o.sailSetupEnable)("driftEnabled",(r=i.runtime.options())==null?null:r.driftEnable)("driftFlow",i.driftFlow())("driftSet",i.driftSet())("waypointEnabled",(s=i.runtime.options())==null?null:s.waypointEnable)("waypointAngle",i.waypointAngle())("vmgToWaypoint",i.vmgToWaypoint()??0)("trueWindMinHistoric",i.trueWindMinHistoric())("trueWindMidHistoric",i.trueWindMidHistoric())("trueWindMaxHistoric",i.trueWindMaxHistoric())("gradianColor",i.gradianColor())}},dependencies:[lh],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}svg-racesteer[_ngcontent-%COMP%]{width:100%;height:100%}"],changeDetection:0})}return n})();var Qy=["canvasMainRef"];function Jy(n,a){if(n&1&&(d(0,"div",8),oe(),d(1,"svg",11)(2,"text",12),c(3),u()()()),n&2){let e=T();f(3),be("@ ",e.startAtTime())}}function eA(n,a){if(n&1){let e=we();d(0,"button",13),$("click",function(){ne(e);let i=T();return ae(i.sendStartTimerCommand("start"))}),d(1,"mat-icon",5),oe(),d(2,"svg",6)(3,"text",14),c(4,"Start"),u()()()(),Ue(),d(5,"button",15),$("click",function(){ne(e);let i=T();return ae(i.adjustStartTime(-60))}),d(6,"mat-icon",5),oe(),d(7,"svg",6)(8,"text",14),c(9,"-1m"),u()()()(),Ue(),d(10,"button",16),$("click",function(){ne(e);let i=T();return ae(i.adjustStartTime(60))}),d(11,"mat-icon",5),oe(),d(12,"svg",6)(13,"text",14),c(14,"+1m"),u()()()()}}function tA(n,a){if(n&1){let e=we();d(0,"button",17),$("click",function(){ne(e);let i=T();return ae(i.sendStartTimerCommand("sync"))}),d(1,"mat-icon",5),oe(),d(2,"svg",18)(3,"text",19),c(4,"Sync"),u()()()(),Ue(),d(5,"button",20),$("click",function(){ne(e);let i=T();return ae(i.sendStartTimerCommand("reset"))}),d(6,"mat-icon",5),oe(),d(7,"svg",18)(8,"text",19),c(9,"Reset"),u()()()()}}function iA(n,a){if(n&1){let e=we();d(0,"button",21),$("click",function(){ne(e);let i=T();return ae(i.adjustStartTime(-60))}),d(1,"mat-icon",5),oe(),d(2,"svg",22)(3,"text",23),c(4,"-1m"),u()()()(),Ue(),d(5,"button",24),$("click",function(){ne(e);let i=T();return ae(i.adjustStartTime(-1))}),d(6,"mat-icon",5),oe(),d(7,"svg",22)(8,"text",23),c(9,"-1s"),u()()()(),Ue(),d(10,"button",25),$("click",function(){ne(e);let i=T();return ae(i.adjustStartTime(1))}),d(11,"mat-icon",5),oe(),d(12,"svg",22)(13,"text",23),c(14,"+1s"),u()()()(),Ue(),d(15,"button",26),$("click",function(){ne(e);let i=T();return ae(i.adjustStartTime(60))}),d(16,"mat-icon",5),oe(),d(17,"svg",22)(18,"text",23),c(19,"+1m"),u()()()()}}function nA(n,a){if(n&1){let e=we();d(0,"input",27),kn("ngModelChange",function(i){ne(e);let o=T();return Tn(o.startAtTimeEdit,i)||(o.startAtTimeEdit=i),ae(i)}),$("change",function(){ne(e);let i=T();return ae(i.setStartTime())}),u()}if(n&2){let e=T();Mn("ngModel",e.startAtTimeEdit)}}function aA(n,a){n&1&&O(0,"div",10)}var uh=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,displayName:"TTS",nextDashboard:0,playBeeps:!0,filterSelfPaths:!0,paths:{ttsPath:{description:"Time to the Start in seconds",path:"self.navigation.racing.timeToStart",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"s",showConvertUnitTo:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"s",sampleTime:500},startTimePath:{description:"Time of the start",path:"self.navigation.racing.startTime",source:"default",pathType:"Date",pathRequired:!1,isPathConfigurable:!1,sampleTime:500},dtsPath:{description:"Distance to Start Line path, used to determine OCS",path:"self.navigation.racing.distanceStartline",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"m",showPathSkUnitsFilter:!1,pathSkUnitsFilter:"m",sampleTime:500}},color:"contrast",enableTimeout:!1,dataTimeout:5,ignoreZones:!0};runtime=A(xe);streams=A(Be);signalk=A(vi);dashboard=A(Tt);canvas=A(St);destroyRef=A(Ie);canvasRef=he.required("canvasMainRef");canvasElement=null;ctx=null;cssWidth=0;cssHeight=0;titleBitmap=null;titleBitmapText=null;titleBitmapColor=null;labelColor=w("");mode=w(1);ttsValue=null;dtsValue=null;valueColor="";valueStateColor="";startAtTime=w("00:00:00");startAtTimeEdit=ns("");constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{let i=Ce(e.color,t);this.labelColor.set(i.dim),this.valueColor=i.color,this.valueStateColor=i.color,this.draw()})}),W(()=>{let e=this.runtime.options();!e||!e.paths?.ttsPath?.path||z(()=>this.streams.observe("ttsPath",o=>{let r=this.ttsValue;this.ttsValue=o?.data?.value??null,this.updateValueColor(),this.draw(),this.shouldBeep(r,this.ttsValue)&&this.beepForValue(this.ttsValue),e.nextDashboard>=0&&r===1&&this.ttsValue===0&&(!this.dtsValue||this.dtsValue>=0)}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.startTimePath?.path||z(()=>this.streams.observe("startTimePath",o=>{let r=o?.data?.value;if(!r)this.startAtTime.set("HH:MM:SS"),this.startAtTimeEdit.set("HH:MM:SS"),this.mode()===2&&this.mode.set(1);else{let s=new Date(r);this.startAtTimeEdit.set(s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})),this.startAtTime.set(this.startAtTimeEdit())}this.draw()}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.dtsPath?.path||z(()=>this.streams.observe("dtsPath",o=>{this.dtsValue=o?.data?.value??null}))}),this.signalk.subscribeRequest().pipe(De(this.destroyRef)).subscribe(e=>{e.widgetUUID===this.id()&&e.statusCode===200&&this.beep(600,20)})}ngAfterViewInit(){this.canvasElement=this.canvasRef().nativeElement,this.ctx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.draw()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),this.draw()}ngOnDestroy(){try{this.canvasElement&&this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}toggleMode(){this.mode.update(t=>(t+1)%5);let e=this.ttsValue;this.mode()===1&&this.isStartTimerRunning()&&this.mode.set(2),this.mode()===2&&e!==0&&!this.isStartTimerRunning()&&this.mode.set(3),this.draw()}sendStartTimerCommand(e){this.signalk.putRequest("navigation.racing.setStartTime",{command:e},this.id()),e==="start"&&this.mode.set(0),e==="reset"&&(this.startAtTime.set("HH:MM:SS"),this.mode.set(1))}adjustStartTime(e){this.signalk.putRequest("navigation.racing.setStartTime",{command:"adjust",delta:e},this.id())}setStartTime(){let e=new Date,t=this.startAtTimeEdit().split(":").map(Number),i=t[0],o=t[1],r=t.length>=3?t[2]:0,s=new Date(e);s.setHours(i,o,r,0),s<=e&&s.setDate(s.getDate()+1),this.mode.set(0),this.signalk.putRequest("navigation.racing.setStartTime",{command:"set",startTime:s.toISOString()},this.id())}isStartTimerRunning(){return(this.ttsValue??0)>0&&this.startAtTime()!==null&&this.startAtTime()!=="HH:MM:SS"}shouldBeep(e,t){return t==null||this.startAtTime()==="HH:MM:SS"||!this.runtime.options()?.playBeeps?!1:t===0&&e!==0||t<10&&t>=0||t<60&&t%10===0?!0:t%60===0}beepForValue(e){e===0?this.beep(500,1e3):e<10?this.beep(450,100):e<60&&e%10===0?this.beep(400,150):e%60===0&&this.beep(350,200)}updateValueColor(){let e=this.theme(),t=this.runtime.options();!e||!t||(t.ignoreZones?this.ttsValue?this.ttsValue===0?this.valueStateColor=this.valueColor:this.ttsValue<10?this.valueStateColor=(this.dtsValue??0)<0?e.zoneAlarm:e.zoneWarn:this.ttsValue<60?this.valueStateColor=e.zoneAlert:this.valueStateColor=this.valueColor:this.valueStateColor=this.valueColor:this.valueStateColor=this.valueColor,this.ttsValue===0?(this.mode.set(2),(this.dtsValue??0)<0&&(this.valueStateColor=e.zoneAlarm)):this.mode()===1&&this.isStartTimerRunning()&&this.mode.set(2))}toHHMMSS(e){if(e==null||isNaN(e))return"-:--";let t=e<0;t&&(e=-e);let i=Math.floor(e/3600),o=Math.floor(e%3600/60),r=Math.floor(e%60),s=t?"-":"";return i===0?`${s}${o.toString().padStart(1,"0")}:${r.toString().padStart(2,"0")}`:`${s}${i.toString().padStart(1,"0")}:${o.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}getValueText(){return this.toHHMMSS(this.ttsValue)}draw(){if(!this.ctx||!this.canvasElement)return;let t=this.runtime.options()?.displayName||"TTS",i=this.labelColor();(!this.titleBitmap||this.titleBitmap.width!==this.canvasElement.width||this.titleBitmap.height!==this.canvasElement.height||this.titleBitmapText!==t||this.titleBitmapColor!==i)&&(this.titleBitmap=this.canvas.createTitleBitmap(t,i,"normal",this.cssWidth,this.cssHeight),this.titleBitmapText=t,this.titleBitmapColor=i),this.canvas.clearCanvas(this.ctx,this.cssWidth,this.cssHeight),this.titleBitmap&&this.ctx.drawImage(this.titleBitmap,0,0,this.cssWidth,this.cssHeight),this.canvas.drawText(this.ctx,this.getValueText(),Math.floor(this.cssWidth*.5),Math.floor(this.cssHeight*.55),Math.floor(this.cssWidth*.95),Math.floor(this.cssHeight*.9),"bold",this.valueStateColor,"center","middle")}beep(e=440,t=100){if(!this.runtime.options()?.playBeeps)return;let i=window.AudioContext||window.webkitAudioContext,o=new i,r=o.createOscillator(),s=o.createGain();r.connect(s),s.connect(o.destination),r.type="sine",r.frequency.value=e,s.gain.value=.1,r.start(),r.stop(o.currentTime+t/1e3)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-racer-timer"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,Qy,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],startAtTimeEdit:[1,"startAtTimeEdit"]},outputs:{startAtTimeEdit:"startAtTimeEditChange"},decls:15,vars:2,consts:[["canvasMainRef",""],[1,"filler"],[1,"timer-canvas"],[1,"buttons-container"],["mat-flat-button","","matTooltip","Select the control mode",1,"button","select-button",3,"click"],[1,"buttons-svg-icon"],["width","100%","height","100%","viewBox","0 0 80 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","40","y","9"],[1,"start-at"],["matInput","","type","time","step","1","matTooltip","Set an absolute start time",1,"set-start-at",3,"ngModel"],[1,"widgetOverlay"],["width","100%","height","100%","viewBox","0 0 80 12","preserveAspectRatio","xMidYMid meet",1,"svg-content","svg-start-at"],["x","40","y","10"],["mat-flat-button","","matTooltip","Start the race timer",1,"button","main-button",3,"click"],["x","40","y","11"],["mat-flat-button","","matTooltip","Remove 1 minute from the timer",1,"button","other-small-button",3,"click"],["mat-flat-button","","matTooltip","Add 1 minute to the timer",1,"button","other-small-button",3,"click"],["mat-flat-button","","matTooltip","Sync the timer to nearest minute",1,"button","main-button",3,"click"],["width","100%","height","100%","viewBox","0 0 100 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","50","y","11"],["mat-flat-button","","matTooltip","Stop and reset the timer",1,"button","other-button",3,"click"],["mat-flat-button","","matTooltip","Reduce the timer by 1 minute",1,"button","main-small-button",3,"click"],["width","100%","height","100%","viewBox","0 0 50 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","25","y","11"],["mat-flat-button","","matTooltip","Reduce the timer by 1 second",1,"button","other-small-button",3,"click"],["mat-flat-button","","matTooltip","Increase the timer by 1 second",1,"button","other-small-button",3,"click"],["mat-flat-button","","matTooltip","Increase the timer by 1 minute",1,"button","main-small-button",3,"click"],["matInput","","type","time","step","1","matTooltip","Set an absolute start time",1,"set-start-at",3,"ngModelChange","change","ngModel"]],template:function(t,i){if(t&1&&(d(0,"div",1),O(1,"canvas",2,0),u(),d(3,"div",3)(4,"button",4),$("click",function(){return i.toggleMode()}),d(5,"mat-icon",5),oe(),d(6,"svg",6)(7,"text",7),c(8,"\u22EE"),u()()()(),I(9,Jy,4,1,"div",8)(10,eA,15,0)(11,tA,10,0)(12,iA,20,0)(13,nA,1,1,"input",9),u(),I(14,aA,1,0,"div",10)),t&2){let o;f(9),P((o=i.mode())===0?9:o===1?10:o===2?11:o===3?12:o===4?13:-1),f(5),P(i.dashboard.isDashboardStatic()?-1:14)}},dependencies:[Ot,bt,ot,Xn,et,vt,Xe,je,Co,Ao,xt],styles:["[_nghost-%COMP%]{overflow:clip;display:block;height:100%;width:100%}.timer-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;min-height:1px}.timer-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;display:block}.filler[_ngcontent-%COMP%]{width:100%;height:76%}.buttons-container[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;justify-content:space-between;column-gap:2%;position:relative;height:24%;width:100%;padding:0 10px 14px;z-index:20;pointer-events:auto;align-items:center}.button[_ngcontent-%COMP%]{min-width:0px;width:100%;border-radius:12px;align-items:center;justify-content:center;cursor:pointer;--mat-button-filled-container-height: 100%;--mat-button-filled-horizontal-padding: 0px;--mat-button-filled-icon-spacing: 0px}.select-button[_ngcontent-%COMP%]{flex:none;width:18%;--mat-button-filled-container-color: var(--kip-blue-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.main-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-port-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.other-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-blue-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.main-small-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-port-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.other-small-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-blue-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.set-start-at[_ngcontent-%COMP%]{flex:1 1 auto;background-color:var(--kip-contrast-color)}.start-at[_ngcontent-%COMP%]{height:100%;width:100%;flex:1 1 auto}.start-at[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{fill:var(--kip-contrast-color)}.start-at[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-family:Roboto;font-size:9px;font-weight:400;text-align:center;text-anchor:middle;font-style:normal;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none}.buttons-svg-icon[_ngcontent-%COMP%]{width:100%;height:100%;margin:0;padding:0}.svg-content[_ngcontent-%COMP%]{width:100%;height:100%;padding:0;margin:0}.svg-content[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-family:Roboto;font-size:15px;font-weight:700;text-align:center;text-anchor:middle;font-style:normal;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none}.svg-start-at[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{fill:var(--kip-contrast-dim-color)}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}"],changeDetection:0})}return n})();var oA=["canvasMainRef"];function rA(n,a){if(n&1&&(d(0,"div",10),oe(),d(1,"svg",11)(2,"text",12),c(3),u()()(),Ue(),d(4,"div",13),oe(),d(5,"svg",14)(6,"text",15)(7,"tspan",16),c(8,"\u2691"),u(),c(9),d(10,"tspan",17),c(11,"\u2691"),u()()()(),Ue(),d(12,"div",18),oe(),d(13,"svg",19)(14,"text",12),c(15),u()()()),n&2){let e=T();f(3),Q(e.portBiasValue()),f(6),be(" ",e.lineLengthValue()," "),f(6),Q(e.stbBiasValue())}}function sA(n,a){if(n&1){let e=we();d(0,"button",20),$("click",function(){ne(e);let i=T();return ae(i.setLineEnd("port"))}),d(1,"mat-icon",6),oe(),d(2,"svg",21)(3,"text",22),c(4,"Port End"),u()()()(),Ue(),d(5,"button",23),$("click",function(){ne(e);let i=T();return ae(i.setLineEnd("stb"))}),d(6,"mat-icon",6),oe(),d(7,"svg",21)(8,"text",22),c(9,"Stbd End"),u()()()()}}function lA(n,a){if(n&1){let e=we();d(0,"button",24),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("port",5,0))}),d(1,"mat-icon",6),oe(),d(2,"svg",25)(3,"text",26),c(4,"+5m"),u()()()(),Ue(),d(5,"button",27),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("port",-5,0))}),d(6,"mat-icon",6),oe(),d(7,"svg",25)(8,"text",26),c(9,"-5m"),u()()()(),Ue(),d(10,"button",28),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("stb",-5,0))}),d(11,"mat-icon",6),oe(),d(12,"svg",25)(13,"text",26),c(14,"-5m"),u()()()(),Ue(),d(15,"button",29),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("stb",5,0))}),d(16,"mat-icon",6),oe(),d(17,"svg",25)(18,"text",26),c(19,"+5m"),u()()()()}}function dA(n,a){if(n&1){let e=we();d(0,"button",30),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("port",0,i.toRadians(1)))}),d(1,"mat-icon",6),oe(),d(2,"svg",25)(3,"text",26),c(4,"\u21911\xB0"),u()()()(),Ue(),d(5,"button",31),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("port",0,i.toRadians(-1)))}),d(6,"mat-icon",6),oe(),d(7,"svg",25)(8,"text",26),c(9,"\u21931\xB0"),u()()()(),Ue(),d(10,"button",32),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("stb",0,i.toRadians(1)))}),d(11,"mat-icon",6),oe(),d(12,"svg",25)(13,"text",26),c(14,"\u21931\xB0"),u()()()(),Ue(),d(15,"button",33),$("click",function(){ne(e);let i=T();return ae(i.adjustLineEnd("stb",0,i.toRadians(-1)))}),d(16,"mat-icon",6),oe(),d(17,"svg",25)(18,"text",26),c(19,"\u21911\xB0"),u()()()()}}function cA(n,a){if(n&1){let e=we();d(0,"button",34),$("click",function(){ne(e);let i=T();return ae(i.nextDisplayLineName())}),d(1,"mat-icon",6),oe(),d(2,"svg",25)(3,"text",26),c(4,"Line"),u()()()(),Ue(),d(5,"button",35),$("click",function(){ne(e);let i=T();return ae(i.setStartLine(i.getDisplayLineName()))}),d(6,"mat-icon",6),oe(),d(7,"svg",36)(8,"text",37),c(9),u()()()()}if(n&2){let e=T();f(5),ct(Gl("button ",e.isDisplayLineCurrent()?"line-button-current":"line-button")),R("matTooltip",Gl("Set the ",e.getDisplayLineName()," line as the current line")),f(4),Q(e.getDisplayLineName())}}function uA(n,a){n&1&&O(0,"div",9)}var mh=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);canvas=A(St);dashboard=A(Tt);signalk=A(vi);destroyRef=A(Ie);static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,displayName:"DTS",filterSelfPaths:!0,playBeeps:!0,convertUnitTo:"m",convertUnitToGroup:"Length",numDecimal:0,ignoreZones:!0,color:"contrast",enableTimeout:!1,dataTimeout:5,paths:{dtsPath:{description:"Distance to Start Line",path:"self.navigation.racing.distanceStartline",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"m",showPathSkUnitsFilter:!0,pathSkUnitsFilter:"m",sampleTime:500},lineLengthPath:{description:"Length of the start line",path:"self.navigation.racing.startLineLength",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"m",showPathSkUnitsFilter:!0,pathSkUnitsFilter:"m",sampleTime:1e3},lineBiasPath:{description:"Bias of the start line to starboard end",path:"self.navigation.racing.stbLineBias",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"m",showPathSkUnitsFilter:!0,pathSkUnitsFilter:"m",sampleTime:1e3},startLineNamePath:{description:"The current named start line",path:"self.navigation.racing.lines.startLineName",source:"default",pathType:"string",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:null,showPathSkUnitsFilter:!1,pathSkUnitsFilter:null,sampleTime:1e3},linesPath:{description:"The known named lines",path:"self.navigation.racing.lines.lines",source:"default",pathType:null,pathRequired:!1,isPathConfigurable:!1,convertUnitTo:null,showPathSkUnitsFilter:!1,pathSkUnitsFilter:null,sampleTime:1e3},ttlPath:{description:"Time to sail to the start line in seconds",path:"self.navigation.racing.timeToLine",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"s",showConvertUnitTo:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"s",sampleTime:500},ttbPath:{description:"Time to delay before sailing to the start line in seconds",path:"self.navigation.racing.timeToBurn",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!1,convertUnitTo:"s",showConvertUnitTo:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"s",sampleTime:500}}};canvasRef=he.required("canvasMainRef");canvasElement=null;ctx=null;cssWidth=0;cssHeight=0;titleBitmap=null;titleBitmapText=null;titleBitmapColor=null;dtsValue=null;lengthValue=null;biasValue=null;ttlValue=null;ttbValue=null;labelColor=w("");valueColor="";dtsColor="";maxValueTextWidth=0;maxValueTextHeight=0;displayLineIndex=0;lines=[];startLineName=null;portBiasValue=w("");lineLengthValue=w("");stbBiasValue=w("");mode=w(0);constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{let i=Ce(e.color,t);this.labelColor.set(i.dim),this.valueColor=i.color,this.draw()})}),W(()=>{let e=this.runtime.options();!e||!e.paths?.dtsPath?.path||z(()=>this.streams.observe("dtsPath",i=>{this.dtsValue=i?.data?.value??null,this.updateDtsColor(),this.draw()}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.lineLengthPath?.path||z(()=>this.streams.observe("lineLengthPath",i=>{this.lengthValue=i?.data?.value??null,this.setLenBias(),this.draw()}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.lineBiasPath?.path||z(()=>this.streams.observe("lineBiasPath",i=>{this.biasValue=i?.data?.value??null,this.setLenBias()}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.startLineNamePath?.path||z(()=>this.streams.observe("startLineNamePath",i=>{console.log("startLineName: "+JSON.stringify(i??"no data")),this.startLineName=i?.data?.value??null,this.displayLineIndex=0;for(let o=0;o<this.lines.length;o++)if(this.lines[o]===this.startLineName){this.displayLineIndex=o;break}this.draw()}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.linesPath?.path||z(()=>this.streams.observe("linesPath",i=>{if(console.log("lines: "+JSON.stringify(i??"no data")),this.lines=["Default"],this.displayLineIndex=0,i?.data?.value&&Array.isArray(i.data.value))for(let o of i.data.value)o.startLineName&&(o.startLineName===this.startLineName&&(this.displayLineIndex=this.lines.length),this.lines.push(o.startLineName))}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.ttlPath?.path||z(()=>this.streams.observe("ttlPath",o=>{this.ttlValue=o?.data?.value??null,this.draw()}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.ttbPath?.path||z(()=>this.streams.observe("ttbPath",o=>{this.ttbValue=o?.data?.value??null,this.draw()}))}),this.signalk.subscribeRequest().pipe(De(this.destroyRef)).subscribe(e=>{e.widgetUUID===this.id()&&e.statusCode===200&&this.beep(600,20)})}ngAfterViewInit(){this.canvasElement=this.canvasRef().nativeElement,this.ctx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.maxValueTextWidth=Math.floor(this.cssWidth*.95),this.maxValueTextHeight=Math.floor(this.cssHeight*.95),this.draw()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),this.maxValueTextWidth=Math.floor(this.cssWidth*.95),this.maxValueTextHeight=Math.floor(this.cssHeight*.95),this.draw()}toggleMode(){this.mode.update(e=>(e+1)%5),this.draw()}setLineEnd(e){return this.signalk.putRequest("navigation.racing.setStartLine",{end:e,position:"bow"},this.id())}adjustLineEnd(e,t,i){return this.signalk.putRequest("navigation.racing.setStartLine",{end:e,delta:t,rotate:i||null},this.id())}nextDisplayLineName(){++this.displayLineIndex>=this.lines.length&&(this.displayLineIndex=0)}getDisplayLineName(){return this.lines[this.displayLineIndex]||"Default"}isDisplayLineCurrent(){return this.getDisplayLineName()===(this.startLineName||"Default")}setStartLine(e){let t=e==="Default"||!e?null:e;this.signalk.putRequest("navigation.racing.setStartLineName",{startLineName:t},this.id()),this.mode.set(0),this.draw()}toRadians(e){return e?e*(Math.PI/180):null}draw(){if(!this.ctx||!this.canvasElement)return;let e=this.runtime.options(),t=e?.displayName||"DTS",i=this.labelColor();(!this.titleBitmap||!e||this.titleBitmap.width!==this.canvasElement.width||this.titleBitmap.height!==this.canvasElement.height||this.titleBitmapText!==t||this.titleBitmapColor!==i)&&(this.titleBitmap=this.canvas.createTitleBitmap(t,i,"normal",this.cssWidth,this.cssHeight),this.titleBitmapText=t,this.titleBitmapColor=i),this.canvas.clearCanvas(this.ctx,this.cssWidth,this.cssHeight),this.titleBitmap&&this.ctx.drawImage(this.titleBitmap,0,0,this.cssWidth,this.cssHeight),this.canvas.drawText(this.ctx,this.getValueText(),Math.floor(this.cssWidth*.5),Math.floor(this.cssHeight*.325),Math.floor(this.cssWidth*.95),Math.floor(this.cssHeight*.55),"bold",this.dtsColor,"center","middle"),this.canvas.drawText(this.ctx,this.runtime.options()?.paths?.dtsPath?.convertUnitTo||"m",Math.floor(this.cssWidth*.975),Math.floor(this.cssHeight*.6),Math.floor(this.cssWidth*.95),Math.floor(this.cssHeight*.15),"normal",this.dtsColor,"right","bottom"),this.canvas.drawText(this.ctx,"TTL",Math.floor(this.cssWidth*.025),Math.floor(this.cssHeight*.7),Math.floor(this.cssWidth*.1),Math.floor(this.cssHeight*.15),"normal",this.dtsColor,"left","middle"),this.canvas.drawText(this.ctx,this.getTimeToLineText(),Math.floor(this.cssWidth*.15),Math.floor(this.cssHeight-.8),Math.floor(this.cssWidth*.35),Math.floor(this.cssHeight*.35),"bold",this.dtsColor,"left","bottom"),this.canvas.drawText(this.ctx,"TTB",Math.floor(this.cssWidth*.525),Math.floor(this.cssHeight*.7),Math.floor(this.cssWidth*.1),Math.floor(this.cssHeight*.15),"normal",this.dtsColor,"left","middle"),this.canvas.drawText(this.ctx,this.getTimeToBurnText(),Math.floor(this.cssWidth*.65),Math.floor(this.cssHeight-.8),Math.floor(this.cssWidth*.35),Math.floor(this.cssHeight*.35),"bold",this.dtsColor,"left","bottom"),this.setLenBias()}getValueText(){if(this.dtsValue===null)return"--";let e=this.runtime.options();return this.dtsValue.toFixed(e?.numDecimal??0)}toHHMMSS(e){if(e==null||isNaN(e))return"-:--";let t=e<0;t&&(e=-e);let i=Math.floor(e/3600),o=Math.floor(e%3600/60),r=Math.floor(e%60),s=t?"-":"";return i===0?`${s}${o.toString().padStart(1,"0")}:${r.toString().padStart(2,"0")}`:`${s}${i.toString().padStart(1,"0")}:${o.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}getTimeToLineText(){return this.toHHMMSS(this.ttlValue)}getTimeToBurnText(){return this.toHHMMSS(this.ttbValue)}setLenBias(){let e=this.runtime.options();if(e){if(e.paths.lineLengthPath.path&&this.lengthValue!=null){let t=e.paths.lineLengthPath.convertUnitTo;t==="feet"&&(t="\u2032"),this.lineLengthValue.set(`\u2015${this.applyDecorations(this.lengthValue.toFixed(e.numDecimal))}${t}\u2015`)}if(e.paths.lineBiasPath.path&&this.biasValue!=null){let t=e.paths.lineBiasPath.convertUnitTo;t==="feet"&&(t="\u2032"),this.biasValue<0?(this.portBiasValue.set("+"+(-this.biasValue).toFixed(e.numDecimal)+t),this.stbBiasValue.set(this.biasValue.toFixed(e.numDecimal)+t)):(this.portBiasValue.set(" "+(-this.biasValue).toFixed(e.numDecimal)+t),this.stbBiasValue.set(" +"+this.biasValue.toFixed(e.numDecimal)+t))}}}applyDecorations(e){switch(this.runtime.options()?.paths?.dtsPath?.convertUnitTo){case"percent":case"percentraw":return e+"%";default:return e}}updateDtsColor(){let e=this.theme(),t=this.runtime.options();!e||!t||(t.ignoreZones?this.dtsValue?this.dtsValue<0?this.dtsColor=e.zoneAlarm:this.dtsValue<10?this.dtsColor=e.zoneWarn:this.dtsValue<20?this.dtsColor=e.zoneAlert:this.dtsColor=this.valueColor:this.dtsColor=this.valueColor:this.dtsColor=this.valueColor)}beep(e=440,t=100){if(!this.runtime.options()?.playBeeps)return;let i=window.AudioContext||window.webkitAudioContext,o=new i,r=o.createOscillator(),s=o.createGain();r.connect(s),s.connect(o.destination),r.type="sine",r.frequency.value=e,s.gain.value=.1,r.start(),r.stop(o.currentTime+t/1e3)}ngOnDestroy(){try{this.canvasElement&&this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-racer-line"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,oA,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:16,vars:2,consts:[["canvasMainRef",""],[1,"line-wrapper"],[1,"filler"],[1,"line-canvas"],[1,"buttons-container"],["mat-flat-button","","matTooltip","Select the control mode",1,"button","select-button",3,"click"],[1,"buttons-svg-icon"],["width","100%","height","100%","viewBox","0 0 80 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","40","y","9"],[1,"widgetOverlay"],[1,"pin-container"],["width","100%","height","100%","viewBox","0 0 70 18","preserveAspectRatio","xMidYMid meet",1,"svg-content","pin"],["x","33","y","14"],[1,"len-bias-container"],["width","100%","height","100%","viewBox","0 0 90 12","preserveAspectRatio","xMidYMid meet",1,"svg-content","len-bias"],["x","45","y","9"],[1,"pin"],[1,"boat"],[1,"boat-container"],["width","100%","height","100%","viewBox","0 0 70 18","preserveAspectRatio","xMidYMid meet",1,"svg-content","boat"],["mat-flat-button","","matTooltip","Set the port(pin) end of the line to the current position",1,"button","port-button",3,"click"],["width","100%","height","100%","viewBox","0 0 100 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","50","y","11"],["mat-flat-button","","matTooltip","Set the starboard(boat) end of the line to the current position",1,"button","starboard-button",3,"click"],["mat-flat-button","","matTooltip","Increase the line length by 5m at the port(pin) end",1,"button","port-small-button",3,"click"],["width","100%","height","100%","viewBox","0 0 50 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","25","y","11"],["mat-flat-button","","matTooltip","Decrease the line length by 5m at the port(pin) end",1,"button","port-small-button",3,"click"],["mat-flat-button","","matTooltip","Decrease the line length by 5m at the starboard(boat) end",1,"button","starboard-small-button",3,"click"],["mat-flat-button","","matTooltip","Increase the line length by 5m at the starboard(boat) end",1,"button","starboard-small-button",3,"click"],["mat-flat-button","","matTooltip","Rotate the line by moving the port(pin) end 1\xB0 clockwise",1,"button","port-small-button",3,"click"],["mat-flat-button","","matTooltip","Rotate the line by moving the port(pin) end 1\xB0 counter-clockwise",1,"button","port-small-button",3,"click"],["mat-flat-button","","matTooltip","Rotate the line by moving the starboard(boat) end 1\xB0 counter-clockwise",1,"button","starboard-small-button",3,"click"],["mat-flat-button","","matTooltip","Rotate the line by moving the starboard(boat) end 1\xB0 clockwise",1,"button","starboard-small-button",3,"click"],["mat-flat-button","","matTooltip","Display the next named line",1,"button","select-button",3,"click"],["mat-flat-button","",3,"click","matTooltip"],["width","100%","height","100%","viewBox","0 0 150 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],["x","75","y","11"]],template:function(t,i){if(t&1&&(d(0,"div",1)(1,"div",2),O(2,"canvas",3,0),u(),d(4,"div",4)(5,"button",5),$("click",function(){return i.toggleMode()}),d(6,"mat-icon",6),oe(),d(7,"svg",7)(8,"text",8),c(9,"\u22EE"),u()()()(),I(10,rA,16,3)(11,sA,10,0)(12,lA,20,0)(13,dA,20,0)(14,cA,10,6),u(),I(15,uA,1,0,"div",9),u()),t&2){let o;f(10),P((o=i.mode())===0?10:o===1?11:o===2?12:o===3?13:o===4?14:-1),f(5),P(i.dashboard.isDashboardStatic()?-1:15)}},dependencies:[et,vt,Xe,je,Co,Ao],styles:["[_nghost-%COMP%]{overflow:clip;display:block;height:100%;width:100%}.line-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;min-height:1px}.line-canvas[_ngcontent-%COMP%]{position:absolute;width:100%!important;height:76%!important;display:block;top:0;left:0}.filler[_ngcontent-%COMP%]{width:100%;height:76%}.buttons-container[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;justify-content:space-between;column-gap:2%;position:relative;height:24%;width:100%;padding:0 10px 14px;z-index:20;pointer-events:auto;align-items:center}.button[_ngcontent-%COMP%]{min-width:0px;width:100%;border-radius:12px;align-items:center;justify-content:center;cursor:pointer;--mat-button-filled-container-height: 100%;--mat-button-filled-horizontal-padding: 0px;--mat-button-filled-icon-spacing: 0px}.select-button[_ngcontent-%COMP%]{flex:none;width:18%;--mat-button-filled-container-color: var(--kip-blue-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.line-button[_ngcontent-%COMP%]{flex:none;width:58%;--mat-button-filled-container-color: var(--kip-grey-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.line-button-current[_ngcontent-%COMP%]{flex:none;width:58%;--mat-button-filled-container-color: var(--kip-orange-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.port-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-port-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.starboard-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-starboard-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.port-small-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-port-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.starboard-small-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-starboard-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.buttons-svg-icon[_ngcontent-%COMP%]{width:100%;height:100%;margin:0;padding:0}.svg-content[_ngcontent-%COMP%]{width:100%;height:100%;padding:0;margin:0}.svg-content[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-family:Roboto;font-size:15px;font-weight:700;text-align:center;text-anchor:middle;font-style:normal;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none}.pin-container[_ngcontent-%COMP%]{flex-basis:18%}.pin[_ngcontent-%COMP%]{fill:var(--kip-port-color)}.pin[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-size:19px}.len-bias-container[_ngcontent-%COMP%]{flex-basis:35%}.len-bias[_ngcontent-%COMP%]{fill:var(--kip-contrast-color)}.len-bias[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-size:12px}.boat-container[_ngcontent-%COMP%]{flex-basis:18%}.boat[_ngcontent-%COMP%]{fill:var(--kip-starboard-color)}.boat[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-size:19px}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}"],changeDetection:0})}return n})();var mA=["canvasMainRef"];function hA(n,a){if(n&1){let e=we();d(0,"button",14),$("click",function(){ne(e);let i=T();return ae(i.startTimer())}),c(1," Start "),u()}}function pA(n,a){if(n&1){let e=we();d(0,"button",15),$("click",function(){ne(e);let i=T();return ae(i.pauseTimer())}),c(1," Pause "),u()}}var hh=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);timers=A(am);canvas=A(St);static DEFAULT_CONFIG={timerLength:-300,color:"contrast",playBeeps:!0};canvasRef=he.required("canvasMainRef");canvasElement=null;ctx=null;cssWidth=0;cssHeight=0;maxTextWidth=0;maxTextHeight=0;dataValue=null;zoneState=null;currentValueLength=0;valueFontSize=1;flashOn=!1;flashInterval=null;timerRunning=w(!1);timeName="race";warnColor="";textColor="";constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{this.applyColors(e.color,t),this.draw()})}),W(()=>{let e=this.runtime.options();e&&this.ensureTimer(e.timerLength??-300)})}ngAfterViewInit(){this.canvasElement=this.canvasRef().nativeElement,this.ctx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.maxTextWidth=Math.floor(this.cssWidth*.95),this.maxTextHeight=Math.floor(this.cssHeight),this.draw()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),this.maxTextWidth=Math.floor(this.cssWidth*.95),this.maxTextHeight=Math.floor(this.cssHeight),this.draw()}ensureTimer(e){this.timers.createTimer(this.timeName,e,1e3).subscribe(i=>{this.dataValue=i,this.timerRunning.set(this.timers.isRunning(this.timeName)),i>0?this.zoneState=J.Normal:i===0?(this.zoneState=J.Normal,this.beep(500,2e3)):i>-10?(this.zoneState=J.Alarm,this.beep(450,100)):i>=-29?this.zoneState=J.Warn:i===-30?(this.zoneState=J.Warn,this.beep(400,200)):this.zoneState=J.Normal,this.zoneState===J.Alarm&&!this.flashInterval?this.flashInterval=setInterval(()=>{this.flashOn=!this.flashOn,this.draw()},500):this.zoneState!==J.Alarm&&this.flashInterval&&(clearInterval(this.flashInterval),this.flashInterval=null,this.flashOn=!1),this.draw()})}startTimer(){this.timers.startTimer(this.timeName),this.timerRunning.set(!0)}resetTimer(){this.timers.deleteTimer(this.timeName),this.timerRunning.set(!1);let e=this.runtime.options();this.ensureTimer(e?.timerLength??-300),this.draw()}pauseTimer(){this.timers.stopTimer(this.timeName),this.timerRunning.set(!1)}roundToMin(){if(this.dataValue==null)return;let t=(this.dataValue<0?-this.dataValue:this.dataValue)%60;this.dataValue>0?this.timers.setTimer(this.timeName,this.dataValue+(t>30?60-t:-t)):this.timers.setTimer(this.timeName,this.dataValue+(t>30?-(60-t):t))}addTime(e){this.dataValue!=null&&this.timers.setTimer(this.timeName,this.dataValue+e)}removeTime(e){this.dataValue!=null&&this.timers.setTimer(this.timeName,this.dataValue-e)}applyColors(e,t){switch(e){case"contrast":this.textColor=t.contrast,this.warnColor=t.zoneAlarm;break;case"blue":this.textColor=t.blue,this.warnColor=t.zoneAlarm;break;case"green":this.textColor=t.green,this.warnColor=t.zoneAlarm;break;case"pink":this.textColor=t.pink,this.warnColor=t.zoneAlarm;break;case"orange":this.textColor=t.orange,this.warnColor=t.zoneAlarm;break;case"purple":this.textColor=t.purple,this.warnColor=t.zoneAlarm;break;case"grey":this.textColor=t.grey,this.warnColor=t.zoneAlarm;break;case"yellow":this.textColor=t.yellow,this.warnColor=t.zoneAlarm;break;default:this.textColor=t.contrast,this.warnColor=t.zoneAlarm;break}}beep(e=440,t=100){if(this.runtime.options()?.playBeeps){let i=new(window.AudioContext||window.webkitAudioContext),o=i.createOscillator(),r=i.createGain();o.connect(r),r.connect(i.destination),o.type="sine",o.frequency.value=e,r.gain.value=.1,o.start(),o.stop(i.currentTime+t/1e3)}}ngOnDestroy(){try{this.canvasElement&&this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}this.flashInterval&&(clearInterval(this.flashInterval),this.flashInterval=null)}draw(){if(!this.ctx)return;this.canvas.clearCanvas(this.ctx,this.cssWidth,this.cssHeight);let e;if(this.dataValue!=null){let t=Math.abs(this.dataValue),i=Math.floor(t/60),o=Math.floor(t%60);e=`${i}:${("0"+o).slice(-2)}`,this.dataValue<0&&(e=`-${e}`)}else e="--";switch(this.currentValueLength!==e.length&&(this.currentValueLength=e.length,this.valueFontSize=this.canvas.calculateOptimalFontSize(this.ctx,e,this.maxTextWidth,this.maxTextHeight,"bold")),this.zoneState){case J.Alarm:this.flashOn?this.ctx.fillStyle=this.textColor:(this.canvas.drawRectangle(this.ctx,0,0,this.cssWidth,this.cssHeight,this.warnColor),this.ctx.fillStyle=this.textColor);break;case J.Warn:this.ctx.fillStyle=this.warnColor;break;default:this.ctx.fillStyle=this.textColor}this.canvas.drawText(this.ctx,e,this.cssWidth/2,this.cssHeight/2,this.maxTextWidth,this.maxTextHeight,"bold",this.ctx.fillStyle,"center","middle")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-racetimer"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,mA,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:35,vars:2,consts:[["canvasMainRef",""],[1,"racetimer-wrapper"],[1,"racetimer-canvas"],[1,"timerBarContainer"],[1,"timer-button-groups","timer-adjusters-group"],["mat-flat-button","",1,"button","other-small-button",3,"click"],[1,"buttons-svg-icon"],["width","100%","height","100%","viewBox","0 0 100 14","preserveAspectRatio","xMidYMid meet",1,"svg-content"],[0,"xml","space","preserve","x","50","y","11"],["mat-flat-button","",1,"button","main-button",3,"click"],[1,"timer-button-groups","timer-countdown-group"],["mat-flat-button","",1,"timer-start-button","button-color-red"],["mat-flat-button","",1,"timer-start-button"],["mat-flat-button","",1,"timer-synch-button","button-color-red",3,"click"],["mat-flat-button","",1,"timer-start-button","button-color-red",3,"click"],["mat-flat-button","",1,"timer-start-button",3,"click"]],template:function(t,i){t&1&&(d(0,"div",1),O(1,"canvas",2,0),d(3,"div",3)(4,"div",4)(5,"button",5),$("click",function(){return i.removeTime(5)}),d(6,"mat-icon",6),oe(),d(7,"svg",7)(8,"text",8),c(9,"-5s"),u()()()(),Ue(),d(10,"button",5),$("click",function(){return i.removeTime(60)}),d(11,"mat-icon",6),oe(),d(12,"svg",7)(13,"text",8),c(14,"-60s"),u()()()(),Ue(),d(15,"button",9),$("click",function(){return i.resetTimer()}),d(16,"mat-icon",6),oe(),d(17,"svg",7)(18,"text",8),c(19,"Reset"),u()()()(),Ue(),d(20,"button",5),$("click",function(){return i.addTime(60)}),d(21,"mat-icon",6),oe(),d(22,"svg",7)(23,"text",8),c(24,"+60s"),u()()()(),Ue(),d(25,"button",5),$("click",function(){return i.addTime(5)}),d(26,"mat-icon",6),oe(),d(27,"svg",7)(28,"text",8),c(29,"+5s"),u()()()()(),Ue(),d(30,"div",10),I(31,hA,2,0,"button",11),I(32,pA,2,0,"button",12),d(33,"button",13),$("click",function(){return i.roundToMin()}),c(34," Synch "),u()()()()),t&2&&(f(31),P(i.timerRunning()?-1:31),f(),P(i.timerRunning()?32:-1))},dependencies:[et,vt,Xe,je],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}.racetimer-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;min-height:1px}.racetimer-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;display:block}.button-color-red[_ngcontent-%COMP%]{--mat-button-filled-container-color: var(--kip-port-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.timerBarContainer[_ngcontent-%COMP%]{position:absolute;left:0;bottom:0;height:23%;width:100%;padding:0 10px 10px;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-end;align-items:stretch;gap:10px}.timer-button-groups[_ngcontent-%COMP%]{min-width:247px;max-width:100%;--mat-button-filled-container-shape: 5px}.timer-adjusters-group[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;gap:10px;height:100%}.timer-countdown-group[_ngcontent-%COMP%]{flex-grow:1;flex-shrink:1}.timer-synch-button[_ngcontent-%COMP%]{width:calc(50% - 5px);margin-left:5px}.timer-start-button[_ngcontent-%COMP%]{width:calc(50% - 5px);margin-right:5px}.buttons-svg-icon[_ngcontent-%COMP%]{width:100%;height:100%;margin:0;padding:0}.button[_ngcontent-%COMP%]{min-width:0px;height:100%;width:100%;border-radius:12px;align-items:center;justify-content:center;cursor:pointer;--mat-button-filled-container-height: 100%;--mat-button-filled-horizontal-padding: 0px;--mat-button-filled-icon-spacing: 0px}.main-button[_ngcontent-%COMP%]{flex:1 1 auto;--mat-button-filled-container-color: var(--kip-port-color);--mat-button-filled-label-text-color: var(--kip-contrast-color)}.svg-content[_ngcontent-%COMP%]{width:100%;height:100%;padding:0;margin:0}.svg-content[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-family:Roboto;font-size:15px;font-weight:700;text-align:center;text-anchor:middle;font-style:normal;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none}"],changeDetection:0})}return n})();var gA=["canvasMainRef"],ph=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);canvas=A(St);canvasRef=he.required("canvasMainRef");canvasElement=null;ctx=null;cssWidth=0;cssHeight=0;titleBitmap=null;titleBitmapText=null;titleBitmapColor=null;maxTextWidth=0;maxTextHeight=0;middle=0;center=0;fontSizeOffset=0;latPos="";longPos="";labelColor=w("");valueColor="";static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,displayName:"Position",filterSelfPaths:!0,paths:{longPath:{description:"Longitude",path:"self.navigation.position.longitude",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"longitudeMin",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500},latPath:{description:"Latitude",path:"self.navigation.position.latitude",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"latitudeMin",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500}},color:"contrast",enableTimeout:!1,dataTimeout:5};constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{let i=Ce(e.color,t);this.labelColor.set(i.dim),this.valueColor=i.color,this.draw()})}),W(()=>{let e=this.runtime.options();if(!e)return;let t=e.paths?.longPath;t?.path&&z(()=>this.streams.observe("longPath",i=>{let o=i?.data?.value;o==null?this.longPos="":t.convertUnitTo==="pdeg"?this.longPos=o.toFixed(6)+"\xB0":this.longPos=String(o),this.calculateFontSizeAndPositions(),this.draw()}))}),W(()=>{let e=this.runtime.options();if(!e)return;let t=e.paths?.latPath;t?.path&&z(()=>this.streams.observe("latPath",i=>{let o=i?.data?.value;o==null?this.latPos="":t.convertUnitTo==="pdeg"?this.latPos=o.toFixed(7)+"\xB0":this.latPos=String(o),this.calculateFontSizeAndPositions(),this.draw()}))})}ngAfterViewInit(){this.canvasElement=this.canvasRef().nativeElement,this.ctx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.calculateFontSizeAndPositions(),this.draw()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),this.calculateFontSizeAndPositions(),this.draw()}calculateFontSizeAndPositions(){if(!this.cssWidth||!this.cssHeight)return;this.maxTextHeight=Math.floor(this.cssHeight*.6/2),this.maxTextWidth=Math.floor(this.cssWidth*.85),this.center=this.cssWidth/2,this.middle=this.cssHeight*.57;let e=this.latPos.length>this.longPos.length?this.latPos:this.longPos;if(this.ctx){let t=this.canvas.calculateOptimalFontSize(this.ctx,e,this.maxTextWidth,this.maxTextHeight,"bold");this.fontSizeOffset=Math.floor(t*5e-4)}}draw(){if(!this.ctx||!this.canvasElement)return;let e=this.runtime.options();if(!e)return;let t=e.displayName||"Position",i=this.labelColor();(!this.titleBitmap||this.titleBitmap.width!==this.canvasElement.width||this.titleBitmap.height!==this.canvasElement.height||this.titleBitmapText!==t||this.titleBitmapColor!==i)&&(this.titleBitmap=this.canvas.createTitleBitmap(t,i,"normal",this.cssWidth,this.cssHeight),this.titleBitmapText=t,this.titleBitmapColor=i),this.canvas.clearCanvas(this.ctx,this.cssWidth,this.cssHeight),this.titleBitmap&&this.titleBitmap.width>0&&this.titleBitmap.height>0&&this.ctx.drawImage(this.titleBitmap,0,0,this.cssWidth,this.cssHeight),this.canvas.drawText(this.ctx,this.latPos,this.center,this.middle-this.fontSizeOffset,this.maxTextWidth,this.maxTextHeight,"bold",this.valueColor,"center","bottom"),this.canvas.drawText(this.ctx,this.longPos,this.center,this.middle+this.fontSizeOffset,this.maxTextWidth,this.maxTextHeight,"bold",this.valueColor,"center","top")}ngOnDestroy(){try{this.canvasElement&&this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-position"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,gA,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:0,consts:[["canvasMainRef",""],[1,"position-canvas"]],template:function(t,i){t&1&&ee(0,"canvas",1,0)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;overflow:hidden}.position-canvas[_ngcontent-%COMP%]{display:block;width:100%!important;height:100%!important;min-height:1px}"],changeDetection:0})}return n})();var fA={value:()=>{}};function fh(){for(var n=0,a=arguments.length,e={},t;n<a;++n){if(!(t=arguments[n]+"")||t in e||/[\s.]/.test(t))throw new Error("illegal type: "+t);e[t]=[]}return new Fs(e)}function Fs(n){this._=n}function vA(n,a){return n.trim().split(/^|\s+/).map(function(e){var t="",i=e.indexOf(".");if(i>=0&&(t=e.slice(i+1),e=e.slice(0,i)),e&&!a.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:t}})}Fs.prototype=fh.prototype={constructor:Fs,on:function(n,a){var e=this._,t=vA(n+"",e),i,o=-1,r=t.length;if(arguments.length<2){for(;++o<r;)if((i=(n=t[o]).type)&&(i=bA(e[i],n.name)))return i;return}if(a!=null&&typeof a!="function")throw new Error("invalid callback: "+a);for(;++o<r;)if(i=(n=t[o]).type)e[i]=gh(e[i],n.name,a);else if(a==null)for(i in e)e[i]=gh(e[i],n.name,null);return this},copy:function(){var n={},a=this._;for(var e in a)n[e]=a[e].slice();return new Fs(n)},call:function(n,a){if((i=arguments.length-2)>0)for(var e=new Array(i),t=0,i,o;t<i;++t)e[t]=arguments[t+2];if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(o=this._[n],t=0,i=o.length;t<i;++t)o[t].value.apply(a,e)},apply:function(n,a,e){if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(var t=this._[n],i=0,o=t.length;i<o;++i)t[i].value.apply(a,e)}};function bA(n,a){for(var e=0,t=n.length,i;e<t;++e)if((i=n[e]).name===a)return i.value}function gh(n,a,e){for(var t=0,i=n.length;t<i;++t)if(n[t].name===a){n[t]=fA,n=n.slice(0,t).concat(n.slice(t+1));break}return e!=null&&n.push({name:a,value:e}),n}var cd=fh;var Bs="http://www.w3.org/1999/xhtml",ud={svg:"http://www.w3.org/2000/svg",xhtml:Bs,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function On(n){var a=n+="",e=a.indexOf(":");return e>=0&&(a=n.slice(0,e))!=="xmlns"&&(n=n.slice(e+1)),ud.hasOwnProperty(a)?{space:ud[a],local:n}:n}function yA(n){return function(){var a=this.ownerDocument,e=this.namespaceURI;return e===Bs&&a.documentElement.namespaceURI===Bs?a.createElement(n):a.createElementNS(e,n)}}function AA(n){return function(){return this.ownerDocument.createElementNS(n.space,n.local)}}function Gs(n){var a=On(n);return(a.local?AA:yA)(a)}function CA(){}function Va(n){return n==null?CA:function(){return this.querySelector(n)}}function vh(n){typeof n!="function"&&(n=Va(n));for(var a=this._groups,e=a.length,t=new Array(e),i=0;i<e;++i)for(var o=a[i],r=o.length,s=t[i]=new Array(r),l,m,h=0;h<r;++h)(l=o[h])&&(m=n.call(l,l.__data__,h,o))&&("__data__"in l&&(m.__data__=l.__data__),s[h]=m);return new Nt(t,this._parents)}function md(n){return n==null?[]:Array.isArray(n)?n:Array.from(n)}function xA(){return[]}function pr(n){return n==null?xA:function(){return this.querySelectorAll(n)}}function SA(n){return function(){return md(n.apply(this,arguments))}}function bh(n){typeof n=="function"?n=SA(n):n=pr(n);for(var a=this._groups,e=a.length,t=[],i=[],o=0;o<e;++o)for(var r=a[o],s=r.length,l,m=0;m<s;++m)(l=r[m])&&(t.push(n.call(l,l.__data__,m,r)),i.push(l));return new Nt(t,i)}function gr(n){return function(){return this.matches(n)}}function zs(n){return function(a){return a.matches(n)}}var wA=Array.prototype.find;function _A(n){return function(){return wA.call(this.children,n)}}function MA(){return this.firstElementChild}function yh(n){return this.select(n==null?MA:_A(typeof n=="function"?n:zs(n)))}var TA=Array.prototype.filter;function kA(){return Array.from(this.children)}function DA(n){return function(){return TA.call(this.children,n)}}function Ah(n){return this.selectAll(n==null?kA:DA(typeof n=="function"?n:zs(n)))}function Ch(n){typeof n!="function"&&(n=gr(n));for(var a=this._groups,e=a.length,t=new Array(e),i=0;i<e;++i)for(var o=a[i],r=o.length,s=t[i]=[],l,m=0;m<r;++m)(l=o[m])&&n.call(l,l.__data__,m,o)&&s.push(l);return new Nt(t,this._parents)}function Us(n){return new Array(n.length)}function xh(){return new Nt(this._enter||this._groups.map(Us),this._parents)}function fr(n,a){this.ownerDocument=n.ownerDocument,this.namespaceURI=n.namespaceURI,this._next=null,this._parent=n,this.__data__=a}fr.prototype={constructor:fr,appendChild:function(n){return this._parent.insertBefore(n,this._next)},insertBefore:function(n,a){return this._parent.insertBefore(n,a)},querySelector:function(n){return this._parent.querySelector(n)},querySelectorAll:function(n){return this._parent.querySelectorAll(n)}};function Sh(n){return function(){return n}}function EA(n,a,e,t,i,o){for(var r=0,s,l=a.length,m=o.length;r<m;++r)(s=a[r])?(s.__data__=o[r],t[r]=s):e[r]=new fr(n,o[r]);for(;r<l;++r)(s=a[r])&&(i[r]=s)}function IA(n,a,e,t,i,o,r){var s,l,m=new Map,h=a.length,v=o.length,y=new Array(h),C;for(s=0;s<h;++s)(l=a[s])&&(y[s]=C=r.call(l,l.__data__,s,a)+"",m.has(C)?i[s]=l:m.set(C,l));for(s=0;s<v;++s)C=r.call(n,o[s],s,o)+"",(l=m.get(C))?(t[s]=l,l.__data__=o[s],m.delete(C)):e[s]=new fr(n,o[s]);for(s=0;s<h;++s)(l=a[s])&&m.get(y[s])===l&&(i[s]=l)}function PA(n){return n.__data__}function wh(n,a){if(!arguments.length)return Array.from(this,PA);var e=a?IA:EA,t=this._parents,i=this._groups;typeof n!="function"&&(n=Sh(n));for(var o=i.length,r=new Array(o),s=new Array(o),l=new Array(o),m=0;m<o;++m){var h=t[m],v=i[m],y=v.length,C=RA(n.call(h,h&&h.__data__,m,t)),S=C.length,_=s[m]=new Array(S),F=r[m]=new Array(S),E=l[m]=new Array(y);e(h,v,_,F,E,C,a);for(var N=0,U=0,j,B;N<S;++N)if(j=_[N]){for(N>=U&&(U=N+1);!(B=F[U])&&++U<S;);j._next=B||null}}return r=new Nt(r,t),r._enter=s,r._exit=l,r}function RA(n){return typeof n=="object"&&"length"in n?n:Array.from(n)}function _h(){return new Nt(this._exit||this._groups.map(Us),this._parents)}function Mh(n,a,e){var t=this.enter(),i=this,o=this.exit();return typeof n=="function"?(t=n(t),t&&(t=t.selection())):t=t.append(n+""),a!=null&&(i=a(i),i&&(i=i.selection())),e==null?o.remove():e(o),t&&i?t.merge(i).order():i}function Th(n){for(var a=n.selection?n.selection():n,e=this._groups,t=a._groups,i=e.length,o=t.length,r=Math.min(i,o),s=new Array(i),l=0;l<r;++l)for(var m=e[l],h=t[l],v=m.length,y=s[l]=new Array(v),C,S=0;S<v;++S)(C=m[S]||h[S])&&(y[S]=C);for(;l<i;++l)s[l]=e[l];return new Nt(s,this._parents)}function kh(){for(var n=this._groups,a=-1,e=n.length;++a<e;)for(var t=n[a],i=t.length-1,o=t[i],r;--i>=0;)(r=t[i])&&(o&&r.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(r,o),o=r);return this}function Dh(n){n||(n=NA);function a(v,y){return v&&y?n(v.__data__,y.__data__):!v-!y}for(var e=this._groups,t=e.length,i=new Array(t),o=0;o<t;++o){for(var r=e[o],s=r.length,l=i[o]=new Array(s),m,h=0;h<s;++h)(m=r[h])&&(l[h]=m);l.sort(a)}return new Nt(i,this._parents).order()}function NA(n,a){return n<a?-1:n>a?1:n>=a?0:NaN}function Eh(){var n=arguments[0];return arguments[0]=this,n.apply(null,arguments),this}function Ih(){return Array.from(this)}function Ph(){for(var n=this._groups,a=0,e=n.length;a<e;++a)for(var t=n[a],i=0,o=t.length;i<o;++i){var r=t[i];if(r)return r}return null}function Rh(){let n=0;for(let a of this)++n;return n}function Nh(){return!this.node()}function Oh(n){for(var a=this._groups,e=0,t=a.length;e<t;++e)for(var i=a[e],o=0,r=i.length,s;o<r;++o)(s=i[o])&&n.call(s,s.__data__,o,i);return this}function OA(n){return function(){this.removeAttribute(n)}}function VA(n){return function(){this.removeAttributeNS(n.space,n.local)}}function LA(n,a){return function(){this.setAttribute(n,a)}}function WA(n,a){return function(){this.setAttributeNS(n.space,n.local,a)}}function FA(n,a){return function(){var e=a.apply(this,arguments);e==null?this.removeAttribute(n):this.setAttribute(n,e)}}function BA(n,a){return function(){var e=a.apply(this,arguments);e==null?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}}function Vh(n,a){var e=On(n);if(arguments.length<2){var t=this.node();return e.local?t.getAttributeNS(e.space,e.local):t.getAttribute(e)}return this.each((a==null?e.local?VA:OA:typeof a=="function"?e.local?BA:FA:e.local?WA:LA)(e,a))}function Hs(n){return n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView}function GA(n){return function(){this.style.removeProperty(n)}}function zA(n,a,e){return function(){this.style.setProperty(n,a,e)}}function UA(n,a,e){return function(){var t=a.apply(this,arguments);t==null?this.style.removeProperty(n):this.style.setProperty(n,t,e)}}function Lh(n,a,e){return arguments.length>1?this.each((a==null?GA:typeof a=="function"?UA:zA)(n,a,e??"")):da(this.node(),n)}function da(n,a){return n.style.getPropertyValue(a)||Hs(n).getComputedStyle(n,null).getPropertyValue(a)}function HA(n){return function(){delete this[n]}}function qA(n,a){return function(){this[n]=a}}function $A(n,a){return function(){var e=a.apply(this,arguments);e==null?delete this[n]:this[n]=e}}function Wh(n,a){return arguments.length>1?this.each((a==null?HA:typeof a=="function"?$A:qA)(n,a)):this.node()[n]}function Fh(n){return n.trim().split(/^|\s+/)}function hd(n){return n.classList||new Bh(n)}function Bh(n){this._node=n,this._names=Fh(n.getAttribute("class")||"")}Bh.prototype={add:function(n){var a=this._names.indexOf(n);a<0&&(this._names.push(n),this._node.setAttribute("class",this._names.join(" ")))},remove:function(n){var a=this._names.indexOf(n);a>=0&&(this._names.splice(a,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(n){return this._names.indexOf(n)>=0}};function Gh(n,a){for(var e=hd(n),t=-1,i=a.length;++t<i;)e.add(a[t])}function zh(n,a){for(var e=hd(n),t=-1,i=a.length;++t<i;)e.remove(a[t])}function jA(n){return function(){Gh(this,n)}}function YA(n){return function(){zh(this,n)}}function KA(n,a){return function(){(a.apply(this,arguments)?Gh:zh)(this,n)}}function Uh(n,a){var e=Fh(n+"");if(arguments.length<2){for(var t=hd(this.node()),i=-1,o=e.length;++i<o;)if(!t.contains(e[i]))return!1;return!0}return this.each((typeof a=="function"?KA:a?jA:YA)(e,a))}function XA(){this.textContent=""}function ZA(n){return function(){this.textContent=n}}function QA(n){return function(){var a=n.apply(this,arguments);this.textContent=a??""}}function Hh(n){return arguments.length?this.each(n==null?XA:(typeof n=="function"?QA:ZA)(n)):this.node().textContent}function JA(){this.innerHTML=""}function eC(n){return function(){this.innerHTML=n}}function tC(n){return function(){var a=n.apply(this,arguments);this.innerHTML=a??""}}function qh(n){return arguments.length?this.each(n==null?JA:(typeof n=="function"?tC:eC)(n)):this.node().innerHTML}function iC(){this.nextSibling&&this.parentNode.appendChild(this)}function $h(){return this.each(iC)}function nC(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function jh(){return this.each(nC)}function Yh(n){var a=typeof n=="function"?n:Gs(n);return this.select(function(){return this.appendChild(a.apply(this,arguments))})}function aC(){return null}function Kh(n,a){var e=typeof n=="function"?n:Gs(n),t=a==null?aC:typeof a=="function"?a:Va(a);return this.select(function(){return this.insertBefore(e.apply(this,arguments),t.apply(this,arguments)||null)})}function oC(){var n=this.parentNode;n&&n.removeChild(this)}function Xh(){return this.each(oC)}function rC(){var n=this.cloneNode(!1),a=this.parentNode;return a?a.insertBefore(n,this.nextSibling):n}function sC(){var n=this.cloneNode(!0),a=this.parentNode;return a?a.insertBefore(n,this.nextSibling):n}function Zh(n){return this.select(n?sC:rC)}function Qh(n){return arguments.length?this.property("__data__",n):this.node().__data__}function lC(n){return function(a){n.call(this,a,this.__data__)}}function dC(n){return n.trim().split(/^|\s+/).map(function(a){var e="",t=a.indexOf(".");return t>=0&&(e=a.slice(t+1),a=a.slice(0,t)),{type:a,name:e}})}function cC(n){return function(){var a=this.__on;if(a){for(var e=0,t=-1,i=a.length,o;e<i;++e)o=a[e],(!n.type||o.type===n.type)&&o.name===n.name?this.removeEventListener(o.type,o.listener,o.options):a[++t]=o;++t?a.length=t:delete this.__on}}}function uC(n,a,e){return function(){var t=this.__on,i,o=lC(a);if(t){for(var r=0,s=t.length;r<s;++r)if((i=t[r]).type===n.type&&i.name===n.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=o,i.options=e),i.value=a;return}}this.addEventListener(n.type,o,e),i={type:n.type,name:n.name,value:a,listener:o,options:e},t?t.push(i):this.__on=[i]}}function Jh(n,a,e){var t=dC(n+""),i,o=t.length,r;if(arguments.length<2){var s=this.node().__on;if(s){for(var l=0,m=s.length,h;l<m;++l)for(i=0,h=s[l];i<o;++i)if((r=t[i]).type===h.type&&r.name===h.name)return h.value}return}for(s=a?uC:cC,i=0;i<o;++i)this.each(s(t[i],a,e));return this}function ep(n,a,e){var t=Hs(n),i=t.CustomEvent;typeof i=="function"?i=new i(a,e):(i=t.document.createEvent("Event"),e?(i.initEvent(a,e.bubbles,e.cancelable),i.detail=e.detail):i.initEvent(a,!1,!1)),n.dispatchEvent(i)}function mC(n,a){return function(){return ep(this,n,a)}}function hC(n,a){return function(){return ep(this,n,a.apply(this,arguments))}}function tp(n,a){return this.each((typeof a=="function"?hC:mC)(n,a))}function*ip(){for(var n=this._groups,a=0,e=n.length;a<e;++a)for(var t=n[a],i=0,o=t.length,r;i<o;++i)(r=t[i])&&(yield r)}var pd=[null];function Nt(n,a){this._groups=n,this._parents=a}function np(){return new Nt([[document.documentElement]],pd)}function pC(){return this}Nt.prototype=np.prototype={constructor:Nt,select:vh,selectAll:bh,selectChild:yh,selectChildren:Ah,filter:Ch,data:wh,enter:xh,exit:_h,join:Mh,merge:Th,selection:pC,order:kh,sort:Dh,call:Eh,nodes:Ih,node:Ph,size:Rh,empty:Nh,each:Oh,attr:Vh,style:Lh,property:Wh,classed:Uh,text:Hh,html:qh,raise:$h,lower:jh,append:Yh,insert:Kh,remove:Xh,clone:Zh,datum:Qh,on:Jh,dispatch:tp,[Symbol.iterator]:ip};var Vn=np;function Wt(n){return typeof n=="string"?new Nt([[document.querySelector(n)]],[document.documentElement]):new Nt([[n]],pd)}function qs(n,a,e){n.prototype=a.prototype=e,e.constructor=n}function gd(n,a){var e=Object.create(n.prototype);for(var t in a)e[t]=a[t];return e}function yr(){}var vr=.7,Ys=1/vr,Do="\\s*([+-]?\\d+)\\s*",br="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",xn="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",gC=/^#([0-9a-f]{3,8})$/,fC=new RegExp(`^rgb\\(${Do},${Do},${Do}\\)$`),vC=new RegExp(`^rgb\\(${xn},${xn},${xn}\\)$`),bC=new RegExp(`^rgba\\(${Do},${Do},${Do},${br}\\)$`),yC=new RegExp(`^rgba\\(${xn},${xn},${xn},${br}\\)$`),AC=new RegExp(`^hsl\\(${br},${xn},${xn}\\)$`),CC=new RegExp(`^hsla\\(${br},${xn},${xn},${br}\\)$`),ap={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};qs(yr,ca,{copy(n){return Object.assign(new this.constructor,this,n)},displayable(){return this.rgb().displayable()},hex:op,formatHex:op,formatHex8:xC,formatHsl:SC,formatRgb:rp,toString:rp});function op(){return this.rgb().formatHex()}function xC(){return this.rgb().formatHex8()}function SC(){return mp(this).formatHsl()}function rp(){return this.rgb().formatRgb()}function ca(n){var a,e;return n=(n+"").trim().toLowerCase(),(a=gC.exec(n))?(e=a[1].length,a=parseInt(a[1],16),e===6?sp(a):e===3?new yi(a>>8&15|a>>4&240,a>>4&15|a&240,(a&15)<<4|a&15,1):e===8?$s(a>>24&255,a>>16&255,a>>8&255,(a&255)/255):e===4?$s(a>>12&15|a>>8&240,a>>8&15|a>>4&240,a>>4&15|a&240,((a&15)<<4|a&15)/255):null):(a=fC.exec(n))?new yi(a[1],a[2],a[3],1):(a=vC.exec(n))?new yi(a[1]*255/100,a[2]*255/100,a[3]*255/100,1):(a=bC.exec(n))?$s(a[1],a[2],a[3],a[4]):(a=yC.exec(n))?$s(a[1]*255/100,a[2]*255/100,a[3]*255/100,a[4]):(a=AC.exec(n))?cp(a[1],a[2]/100,a[3]/100,1):(a=CC.exec(n))?cp(a[1],a[2]/100,a[3]/100,a[4]):ap.hasOwnProperty(n)?sp(ap[n]):n==="transparent"?new yi(NaN,NaN,NaN,0):null}function sp(n){return new yi(n>>16&255,n>>8&255,n&255,1)}function $s(n,a,e,t){return t<=0&&(n=a=e=NaN),new yi(n,a,e,t)}function wC(n){return n instanceof yr||(n=ca(n)),n?(n=n.rgb(),new yi(n.r,n.g,n.b,n.opacity)):new yi}function Eo(n,a,e,t){return arguments.length===1?wC(n):new yi(n,a,e,t??1)}function yi(n,a,e,t){this.r=+n,this.g=+a,this.b=+e,this.opacity=+t}qs(yi,Eo,gd(yr,{brighter(n){return n=n==null?Ys:Math.pow(Ys,n),new yi(this.r*n,this.g*n,this.b*n,this.opacity)},darker(n){return n=n==null?vr:Math.pow(vr,n),new yi(this.r*n,this.g*n,this.b*n,this.opacity)},rgb(){return this},clamp(){return new yi(Wa(this.r),Wa(this.g),Wa(this.b),Ks(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:lp,formatHex:lp,formatHex8:_C,formatRgb:dp,toString:dp}));function lp(){return`#${La(this.r)}${La(this.g)}${La(this.b)}`}function _C(){return`#${La(this.r)}${La(this.g)}${La(this.b)}${La((isNaN(this.opacity)?1:this.opacity)*255)}`}function dp(){let n=Ks(this.opacity);return`${n===1?"rgb(":"rgba("}${Wa(this.r)}, ${Wa(this.g)}, ${Wa(this.b)}${n===1?")":`, ${n})`}`}function Ks(n){return isNaN(n)?1:Math.max(0,Math.min(1,n))}function Wa(n){return Math.max(0,Math.min(255,Math.round(n)||0))}function La(n){return n=Wa(n),(n<16?"0":"")+n.toString(16)}function cp(n,a,e,t){return t<=0?n=a=e=NaN:e<=0||e>=1?n=a=NaN:a<=0&&(n=NaN),new tn(n,a,e,t)}function mp(n){if(n instanceof tn)return new tn(n.h,n.s,n.l,n.opacity);if(n instanceof yr||(n=ca(n)),!n)return new tn;if(n instanceof tn)return n;n=n.rgb();var a=n.r/255,e=n.g/255,t=n.b/255,i=Math.min(a,e,t),o=Math.max(a,e,t),r=NaN,s=o-i,l=(o+i)/2;return s?(a===o?r=(e-t)/s+(e<t)*6:e===o?r=(t-a)/s+2:r=(a-e)/s+4,s/=l<.5?o+i:2-o-i,r*=60):s=l>0&&l<1?0:r,new tn(r,s,l,n.opacity)}function hp(n,a,e,t){return arguments.length===1?mp(n):new tn(n,a,e,t??1)}function tn(n,a,e,t){this.h=+n,this.s=+a,this.l=+e,this.opacity=+t}qs(tn,hp,gd(yr,{brighter(n){return n=n==null?Ys:Math.pow(Ys,n),new tn(this.h,this.s,this.l*n,this.opacity)},darker(n){return n=n==null?vr:Math.pow(vr,n),new tn(this.h,this.s,this.l*n,this.opacity)},rgb(){var n=this.h%360+(this.h<0)*360,a=isNaN(n)||isNaN(this.s)?0:this.s,e=this.l,t=e+(e<.5?e:1-e)*a,i=2*e-t;return new yi(fd(n>=240?n-240:n+120,i,t),fd(n,i,t),fd(n<120?n+240:n-120,i,t),this.opacity)},clamp(){return new tn(up(this.h),js(this.s),js(this.l),Ks(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let n=Ks(this.opacity);return`${n===1?"hsl(":"hsla("}${up(this.h)}, ${js(this.s)*100}%, ${js(this.l)*100}%${n===1?")":`, ${n})`}`}}));function up(n){return n=(n||0)%360,n<0?n+360:n}function js(n){return Math.max(0,Math.min(1,n||0))}function fd(n,a,e){return(n<60?a+(e-a)*n/60:n<180?e:n<240?a+(e-a)*(240-n)/60:a)*255}function vd(n,a,e,t,i){var o=n*n,r=o*n;return((1-3*n+3*o-r)*a+(4-6*o+3*r)*e+(1+3*n+3*o-3*r)*t+r*i)/6}function pp(n){var a=n.length-1;return function(e){var t=e<=0?e=0:e>=1?(e=1,a-1):Math.floor(e*a),i=n[t],o=n[t+1],r=t>0?n[t-1]:2*i-o,s=t<a-1?n[t+2]:2*o-i;return vd((e-t/a)*a,r,i,o,s)}}function gp(n){var a=n.length;return function(e){var t=Math.floor(((e%=1)<0?++e:e)*a),i=n[(t+a-1)%a],o=n[t%a],r=n[(t+1)%a],s=n[(t+2)%a];return vd((e-t/a)*a,i,o,r,s)}}var bd=n=>()=>n;function MC(n,a){return function(e){return n+e*a}}function TC(n,a,e){return n=Math.pow(n,e),a=Math.pow(a,e)-n,e=1/e,function(t){return Math.pow(n+t*a,e)}}function fp(n){return(n=+n)==1?Xs:function(a,e){return e-a?TC(a,e,n):bd(isNaN(a)?e:a)}}function Xs(n,a){var e=a-n;return e?MC(n,e):bd(isNaN(n)?a:n)}var Zs=(function n(a){var e=fp(a);function t(i,o){var r=e((i=Eo(i)).r,(o=Eo(o)).r),s=e(i.g,o.g),l=e(i.b,o.b),m=Xs(i.opacity,o.opacity);return function(h){return i.r=r(h),i.g=s(h),i.b=l(h),i.opacity=m(h),i+""}}return t.gamma=n,t})(1);function vp(n){return function(a){var e=a.length,t=new Array(e),i=new Array(e),o=new Array(e),r,s;for(r=0;r<e;++r)s=Eo(a[r]),t[r]=s.r||0,i[r]=s.g||0,o[r]=s.b||0;return t=n(t),i=n(i),o=n(o),s.opacity=1,function(l){return s.r=t(l),s.g=i(l),s.b=o(l),s+""}}}var kC=vp(pp),DC=vp(gp);function Bi(n,a){return n=+n,a=+a,function(e){return n*(1-e)+a*e}}var Ad=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,yd=new RegExp(Ad.source,"g");function EC(n){return function(){return n}}function IC(n){return function(a){return n(a)+""}}function Cd(n,a){var e=Ad.lastIndex=yd.lastIndex=0,t,i,o,r=-1,s=[],l=[];for(n=n+"",a=a+"";(t=Ad.exec(n))&&(i=yd.exec(a));)(o=i.index)>e&&(o=a.slice(e,o),s[r]?s[r]+=o:s[++r]=o),(t=t[0])===(i=i[0])?s[r]?s[r]+=i:s[++r]=i:(s[++r]=null,l.push({i:r,x:Bi(t,i)})),e=yd.lastIndex;return e<a.length&&(o=a.slice(e),s[r]?s[r]+=o:s[++r]=o),s.length<2?l[0]?IC(l[0].x):EC(a):(a=l.length,function(m){for(var h=0,v;h<a;++h)s[(v=l[h]).i]=v.x(m);return s.join("")})}var bp=180/Math.PI,Qs={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function xd(n,a,e,t,i,o){var r,s,l;return(r=Math.sqrt(n*n+a*a))&&(n/=r,a/=r),(l=n*e+a*t)&&(e-=n*l,t-=a*l),(s=Math.sqrt(e*e+t*t))&&(e/=s,t/=s,l/=s),n*t<a*e&&(n=-n,a=-a,l=-l,r=-r),{translateX:i,translateY:o,rotate:Math.atan2(a,n)*bp,skewX:Math.atan(l)*bp,scaleX:r,scaleY:s}}var Js;function yp(n){let a=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(n+"");return a.isIdentity?Qs:xd(a.a,a.b,a.c,a.d,a.e,a.f)}function Ap(n){return n==null?Qs:(Js||(Js=document.createElementNS("http://www.w3.org/2000/svg","g")),Js.setAttribute("transform",n),(n=Js.transform.baseVal.consolidate())?(n=n.matrix,xd(n.a,n.b,n.c,n.d,n.e,n.f)):Qs)}function Cp(n,a,e,t){function i(m){return m.length?m.pop()+" ":""}function o(m,h,v,y,C,S){if(m!==v||h!==y){var _=C.push("translate(",null,a,null,e);S.push({i:_-4,x:Bi(m,v)},{i:_-2,x:Bi(h,y)})}else(v||y)&&C.push("translate("+v+a+y+e)}function r(m,h,v,y){m!==h?(m-h>180?h+=360:h-m>180&&(m+=360),y.push({i:v.push(i(v)+"rotate(",null,t)-2,x:Bi(m,h)})):h&&v.push(i(v)+"rotate("+h+t)}function s(m,h,v,y){m!==h?y.push({i:v.push(i(v)+"skewX(",null,t)-2,x:Bi(m,h)}):h&&v.push(i(v)+"skewX("+h+t)}function l(m,h,v,y,C,S){if(m!==v||h!==y){var _=C.push(i(C)+"scale(",null,",",null,")");S.push({i:_-4,x:Bi(m,v)},{i:_-2,x:Bi(h,y)})}else(v!==1||y!==1)&&C.push(i(C)+"scale("+v+","+y+")")}return function(m,h){var v=[],y=[];return m=n(m),h=n(h),o(m.translateX,m.translateY,h.translateX,h.translateY,v,y),r(m.rotate,h.rotate,v,y),s(m.skewX,h.skewX,v,y),l(m.scaleX,m.scaleY,h.scaleX,h.scaleY,v,y),m=h=null,function(C){for(var S=-1,_=y.length,F;++S<_;)v[(F=y[S]).i]=F.x(C);return v.join("")}}}var Sd=Cp(yp,"px, ","px)","deg)"),wd=Cp(Ap,", ",")",")");var Io=0,Cr=0,Ar=0,Sp=1e3,el,xr,tl=0,Fa=0,il=0,Sr=typeof performance=="object"&&performance.now?performance:Date,wp=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(n){setTimeout(n,17)};function _r(){return Fa||(wp(PC),Fa=Sr.now()+il)}function PC(){Fa=0}function wr(){this._call=this._time=this._next=null}wr.prototype=nl.prototype={constructor:wr,restart:function(n,a,e){if(typeof n!="function")throw new TypeError("callback is not a function");e=(e==null?_r():+e)+(a==null?0:+a),!this._next&&xr!==this&&(xr?xr._next=this:el=this,xr=this),this._call=n,this._time=e,_d()},stop:function(){this._call&&(this._call=null,this._time=1/0,_d())}};function nl(n,a,e){var t=new wr;return t.restart(n,a,e),t}function _p(){_r(),++Io;for(var n=el,a;n;)(a=Fa-n._time)>=0&&n._call.call(void 0,a),n=n._next;--Io}function xp(){Fa=(tl=Sr.now())+il,Io=Cr=0;try{_p()}finally{Io=0,NC(),Fa=0}}function RC(){var n=Sr.now(),a=n-tl;a>Sp&&(il-=a,tl=n)}function NC(){for(var n,a=el,e,t=1/0;a;)a._call?(t>a._time&&(t=a._time),n=a,a=a._next):(e=a._next,a._next=null,a=n?n._next=e:el=e);xr=n,_d(t)}function _d(n){if(!Io){Cr&&(Cr=clearTimeout(Cr));var a=n-Fa;a>24?(n<1/0&&(Cr=setTimeout(xp,n-Sr.now()-il)),Ar&&(Ar=clearInterval(Ar))):(Ar||(tl=Sr.now(),Ar=setInterval(RC,Sp)),Io=1,wp(xp))}}function al(n,a,e){var t=new wr;return a=a==null?0:+a,t.restart(i=>{t.stop(),n(i+a)},a,e),t}var OC=cd("start","end","cancel","interrupt"),VC=[],kp=0,Mp=1,rl=2,ol=3,Tp=4,sl=5,Mr=6;function ua(n,a,e,t,i,o){var r=n.__transition;if(!r)n.__transition={};else if(e in r)return;LC(n,e,{name:a,index:t,group:i,on:OC,tween:VC,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:kp})}function Tr(n,a){var e=Ft(n,a);if(e.state>kp)throw new Error("too late; already scheduled");return e}function Kt(n,a){var e=Ft(n,a);if(e.state>ol)throw new Error("too late; already running");return e}function Ft(n,a){var e=n.__transition;if(!e||!(e=e[a]))throw new Error("transition not found");return e}function LC(n,a,e){var t=n.__transition,i;t[a]=e,e.timer=nl(o,0,e.time);function o(m){e.state=Mp,e.timer.restart(r,e.delay,e.time),e.delay<=m&&r(m-e.delay)}function r(m){var h,v,y,C;if(e.state!==Mp)return l();for(h in t)if(C=t[h],C.name===e.name){if(C.state===ol)return al(r);C.state===Tp?(C.state=Mr,C.timer.stop(),C.on.call("interrupt",n,n.__data__,C.index,C.group),delete t[h]):+h<a&&(C.state=Mr,C.timer.stop(),C.on.call("cancel",n,n.__data__,C.index,C.group),delete t[h])}if(al(function(){e.state===ol&&(e.state=Tp,e.timer.restart(s,e.delay,e.time),s(m))}),e.state=rl,e.on.call("start",n,n.__data__,e.index,e.group),e.state===rl){for(e.state=ol,i=new Array(y=e.tween.length),h=0,v=-1;h<y;++h)(C=e.tween[h].value.call(n,n.__data__,e.index,e.group))&&(i[++v]=C);i.length=v+1}}function s(m){for(var h=m<e.duration?e.ease.call(null,m/e.duration):(e.timer.restart(l),e.state=sl,1),v=-1,y=i.length;++v<y;)i[v].call(n,h);e.state===sl&&(e.on.call("end",n,n.__data__,e.index,e.group),l())}function l(){e.state=Mr,e.timer.stop(),delete t[a];for(var m in t)return;delete n.__transition}}function ll(n,a){var e=n.__transition,t,i,o=!0,r;if(e){a=a==null?null:a+"";for(r in e){if((t=e[r]).name!==a){o=!1;continue}i=t.state>rl&&t.state<sl,t.state=Mr,t.timer.stop(),t.on.call(i?"interrupt":"cancel",n,n.__data__,t.index,t.group),delete e[r]}o&&delete n.__transition}}function Dp(n){return this.each(function(){ll(this,n)})}function WC(n,a){var e,t;return function(){var i=Kt(this,n),o=i.tween;if(o!==e){t=e=o;for(var r=0,s=t.length;r<s;++r)if(t[r].name===a){t=t.slice(),t.splice(r,1);break}}i.tween=t}}function FC(n,a,e){var t,i;if(typeof e!="function")throw new Error;return function(){var o=Kt(this,n),r=o.tween;if(r!==t){i=(t=r).slice();for(var s={name:a,value:e},l=0,m=i.length;l<m;++l)if(i[l].name===a){i[l]=s;break}l===m&&i.push(s)}o.tween=i}}function Ep(n,a){var e=this._id;if(n+="",arguments.length<2){for(var t=Ft(this.node(),e).tween,i=0,o=t.length,r;i<o;++i)if((r=t[i]).name===n)return r.value;return null}return this.each((a==null?WC:FC)(e,n,a))}function Po(n,a,e){var t=n._id;return n.each(function(){var i=Kt(this,t);(i.value||(i.value={}))[a]=e.apply(this,arguments)}),function(i){return Ft(i,t).value[a]}}function dl(n,a){var e;return(typeof a=="number"?Bi:a instanceof ca?Zs:(e=ca(a))?(a=e,Zs):Cd)(n,a)}function BC(n){return function(){this.removeAttribute(n)}}function GC(n){return function(){this.removeAttributeNS(n.space,n.local)}}function zC(n,a,e){var t,i=e+"",o;return function(){var r=this.getAttribute(n);return r===i?null:r===t?o:o=a(t=r,e)}}function UC(n,a,e){var t,i=e+"",o;return function(){var r=this.getAttributeNS(n.space,n.local);return r===i?null:r===t?o:o=a(t=r,e)}}function HC(n,a,e){var t,i,o;return function(){var r,s=e(this),l;return s==null?void this.removeAttribute(n):(r=this.getAttribute(n),l=s+"",r===l?null:r===t&&l===i?o:(i=l,o=a(t=r,s)))}}function qC(n,a,e){var t,i,o;return function(){var r,s=e(this),l;return s==null?void this.removeAttributeNS(n.space,n.local):(r=this.getAttributeNS(n.space,n.local),l=s+"",r===l?null:r===t&&l===i?o:(i=l,o=a(t=r,s)))}}function Ip(n,a){var e=On(n),t=e==="transform"?wd:dl;return this.attrTween(n,typeof a=="function"?(e.local?qC:HC)(e,t,Po(this,"attr."+n,a)):a==null?(e.local?GC:BC)(e):(e.local?UC:zC)(e,t,a))}function $C(n,a){return function(e){this.setAttribute(n,a.call(this,e))}}function jC(n,a){return function(e){this.setAttributeNS(n.space,n.local,a.call(this,e))}}function YC(n,a){var e,t;function i(){var o=a.apply(this,arguments);return o!==t&&(e=(t=o)&&jC(n,o)),e}return i._value=a,i}function KC(n,a){var e,t;function i(){var o=a.apply(this,arguments);return o!==t&&(e=(t=o)&&$C(n,o)),e}return i._value=a,i}function Pp(n,a){var e="attr."+n;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(a==null)return this.tween(e,null);if(typeof a!="function")throw new Error;var t=On(n);return this.tween(e,(t.local?YC:KC)(t,a))}function XC(n,a){return function(){Tr(this,n).delay=+a.apply(this,arguments)}}function ZC(n,a){return a=+a,function(){Tr(this,n).delay=a}}function Rp(n){var a=this._id;return arguments.length?this.each((typeof n=="function"?XC:ZC)(a,n)):Ft(this.node(),a).delay}function QC(n,a){return function(){Kt(this,n).duration=+a.apply(this,arguments)}}function JC(n,a){return a=+a,function(){Kt(this,n).duration=a}}function Np(n){var a=this._id;return arguments.length?this.each((typeof n=="function"?QC:JC)(a,n)):Ft(this.node(),a).duration}function ex(n,a){if(typeof a!="function")throw new Error;return function(){Kt(this,n).ease=a}}function Op(n){var a=this._id;return arguments.length?this.each(ex(a,n)):Ft(this.node(),a).ease}function tx(n,a){return function(){var e=a.apply(this,arguments);if(typeof e!="function")throw new Error;Kt(this,n).ease=e}}function Vp(n){if(typeof n!="function")throw new Error;return this.each(tx(this._id,n))}function Lp(n){typeof n!="function"&&(n=gr(n));for(var a=this._groups,e=a.length,t=new Array(e),i=0;i<e;++i)for(var o=a[i],r=o.length,s=t[i]=[],l,m=0;m<r;++m)(l=o[m])&&n.call(l,l.__data__,m,o)&&s.push(l);return new li(t,this._parents,this._name,this._id)}function Wp(n){if(n._id!==this._id)throw new Error;for(var a=this._groups,e=n._groups,t=a.length,i=e.length,o=Math.min(t,i),r=new Array(t),s=0;s<o;++s)for(var l=a[s],m=e[s],h=l.length,v=r[s]=new Array(h),y,C=0;C<h;++C)(y=l[C]||m[C])&&(v[C]=y);for(;s<t;++s)r[s]=a[s];return new li(r,this._parents,this._name,this._id)}function ix(n){return(n+"").trim().split(/^|\s+/).every(function(a){var e=a.indexOf(".");return e>=0&&(a=a.slice(0,e)),!a||a==="start"})}function nx(n,a,e){var t,i,o=ix(a)?Tr:Kt;return function(){var r=o(this,n),s=r.on;s!==t&&(i=(t=s).copy()).on(a,e),r.on=i}}function Fp(n,a){var e=this._id;return arguments.length<2?Ft(this.node(),e).on.on(n):this.each(nx(e,n,a))}function ax(n){return function(){var a=this.parentNode;for(var e in this.__transition)if(+e!==n)return;a&&a.removeChild(this)}}function Bp(){return this.on("end.remove",ax(this._id))}function Gp(n){var a=this._name,e=this._id;typeof n!="function"&&(n=Va(n));for(var t=this._groups,i=t.length,o=new Array(i),r=0;r<i;++r)for(var s=t[r],l=s.length,m=o[r]=new Array(l),h,v,y=0;y<l;++y)(h=s[y])&&(v=n.call(h,h.__data__,y,s))&&("__data__"in h&&(v.__data__=h.__data__),m[y]=v,ua(m[y],a,e,y,m,Ft(h,e)));return new li(o,this._parents,a,e)}function zp(n){var a=this._name,e=this._id;typeof n!="function"&&(n=pr(n));for(var t=this._groups,i=t.length,o=[],r=[],s=0;s<i;++s)for(var l=t[s],m=l.length,h,v=0;v<m;++v)if(h=l[v]){for(var y=n.call(h,h.__data__,v,l),C,S=Ft(h,e),_=0,F=y.length;_<F;++_)(C=y[_])&&ua(C,a,e,_,y,S);o.push(y),r.push(h)}return new li(o,r,a,e)}var ox=Vn.prototype.constructor;function Up(){return new ox(this._groups,this._parents)}function rx(n,a){var e,t,i;return function(){var o=da(this,n),r=(this.style.removeProperty(n),da(this,n));return o===r?null:o===e&&r===t?i:i=a(e=o,t=r)}}function Hp(n){return function(){this.style.removeProperty(n)}}function sx(n,a,e){var t,i=e+"",o;return function(){var r=da(this,n);return r===i?null:r===t?o:o=a(t=r,e)}}function lx(n,a,e){var t,i,o;return function(){var r=da(this,n),s=e(this),l=s+"";return s==null&&(l=s=(this.style.removeProperty(n),da(this,n))),r===l?null:r===t&&l===i?o:(i=l,o=a(t=r,s))}}function dx(n,a){var e,t,i,o="style."+a,r="end."+o,s;return function(){var l=Kt(this,n),m=l.on,h=l.value[o]==null?s||(s=Hp(a)):void 0;(m!==e||i!==h)&&(t=(e=m).copy()).on(r,i=h),l.on=t}}function qp(n,a,e){var t=(n+="")=="transform"?Sd:dl;return a==null?this.styleTween(n,rx(n,t)).on("end.style."+n,Hp(n)):typeof a=="function"?this.styleTween(n,lx(n,t,Po(this,"style."+n,a))).each(dx(this._id,n)):this.styleTween(n,sx(n,t,a),e).on("end.style."+n,null)}function cx(n,a,e){return function(t){this.style.setProperty(n,a.call(this,t),e)}}function ux(n,a,e){var t,i;function o(){var r=a.apply(this,arguments);return r!==i&&(t=(i=r)&&cx(n,r,e)),t}return o._value=a,o}function $p(n,a,e){var t="style."+(n+="");if(arguments.length<2)return(t=this.tween(t))&&t._value;if(a==null)return this.tween(t,null);if(typeof a!="function")throw new Error;return this.tween(t,ux(n,a,e??""))}function mx(n){return function(){this.textContent=n}}function hx(n){return function(){var a=n(this);this.textContent=a??""}}function jp(n){return this.tween("text",typeof n=="function"?hx(Po(this,"text",n)):mx(n==null?"":n+""))}function px(n){return function(a){this.textContent=n.call(this,a)}}function gx(n){var a,e;function t(){var i=n.apply(this,arguments);return i!==e&&(a=(e=i)&&px(i)),a}return t._value=n,t}function Yp(n){var a="text";if(arguments.length<1)return(a=this.tween(a))&&a._value;if(n==null)return this.tween(a,null);if(typeof n!="function")throw new Error;return this.tween(a,gx(n))}function Kp(){for(var n=this._name,a=this._id,e=cl(),t=this._groups,i=t.length,o=0;o<i;++o)for(var r=t[o],s=r.length,l,m=0;m<s;++m)if(l=r[m]){var h=Ft(l,a);ua(l,n,e,m,r,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new li(t,this._parents,n,e)}function Xp(){var n,a,e=this,t=e._id,i=e.size();return new Promise(function(o,r){var s={value:r},l={value:function(){--i===0&&o()}};e.each(function(){var m=Kt(this,t),h=m.on;h!==n&&(a=(n=h).copy(),a._.cancel.push(s),a._.interrupt.push(s),a._.end.push(l)),m.on=a}),i===0&&o()})}var fx=0;function li(n,a,e,t){this._groups=n,this._parents=a,this._name=e,this._id=t}function Zp(n){return Vn().transition(n)}function cl(){return++fx}var Ln=Vn.prototype;li.prototype=Zp.prototype={constructor:li,select:Gp,selectAll:zp,selectChild:Ln.selectChild,selectChildren:Ln.selectChildren,filter:Lp,merge:Wp,selection:Up,transition:Kp,call:Ln.call,nodes:Ln.nodes,node:Ln.node,size:Ln.size,empty:Ln.empty,each:Ln.each,on:Fp,attr:Ip,attrTween:Pp,style:qp,styleTween:$p,text:jp,textTween:Yp,remove:Bp,tween:Ep,delay:Rp,duration:Np,ease:Op,easeVarying:Vp,end:Xp,[Symbol.iterator]:Ln[Symbol.iterator]};function ul(n){return((n*=2)<=1?n*n*n:(n-=2)*n*n+2)/2}var vx={time:null,delay:0,duration:250,ease:ul};function bx(n,a){for(var e;!(e=n.__transition)||!(e=e[a]);)if(!(n=n.parentNode))throw new Error(`transition ${a} not found`);return e}function Qp(n){var a,e;n instanceof li?(a=n._id,n=n._name):(a=cl(),(e=vx).time=_r(),n=n==null?null:n+"");for(var t=this._groups,i=t.length,o=0;o<i;++o)for(var r=t[o],s=r.length,l,m=0;m<s;++m)(l=r[m])&&ua(l,n,a,m,r,e||bx(l,a));return new li(t,this._parents,n,a)}Vn.prototype.interrupt=Dp;Vn.prototype.transition=Qp;var{abs:X8,max:Z8,min:Q8}=Math;function Jp(n){return[+n[0],+n[1]]}function yx(n){return[Jp(n[0]),Jp(n[1])]}var J8={name:"x",handles:["w","e"].map(Md),input:function(n,a){return n==null?null:[[+n[0],a[0][1]],[+n[1],a[1][1]]]},output:function(n){return n&&[n[0][0],n[1][0]]}},eL={name:"y",handles:["n","s"].map(Md),input:function(n,a){return n==null?null:[[a[0][0],+n[0]],[a[1][0],+n[1]]]},output:function(n){return n&&[n[0][1],n[1][1]]}},tL={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(Md),input:function(n){return n==null?null:yx(n)},output:function(n){return n}};function Md(n){return{type:n}}var Td=Math.PI,kd=2*Td,Ba=1e-6,Ax=kd-Ba;function eg(n){this._+=n[0];for(let a=1,e=n.length;a<e;++a)this._+=arguments[a]+n[a]}function Cx(n){let a=Math.floor(n);if(!(a>=0))throw new Error(`invalid digits: ${n}`);if(a>15)return eg;let e=10**a;return function(t){this._+=t[0];for(let i=1,o=t.length;i<o;++i)this._+=Math.round(arguments[i]*e)/e+t[i]}}var Ga=class{constructor(a){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=a==null?eg:Cx(a)}moveTo(a,e){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+e}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(a,e){this._append`L${this._x1=+a},${this._y1=+e}`}quadraticCurveTo(a,e,t,i){this._append`Q${+a},${+e},${this._x1=+t},${this._y1=+i}`}bezierCurveTo(a,e,t,i,o,r){this._append`C${+a},${+e},${+t},${+i},${this._x1=+o},${this._y1=+r}`}arcTo(a,e,t,i,o){if(a=+a,e=+e,t=+t,i=+i,o=+o,o<0)throw new Error(`negative radius: ${o}`);let r=this._x1,s=this._y1,l=t-a,m=i-e,h=r-a,v=s-e,y=h*h+v*v;if(this._x1===null)this._append`M${this._x1=a},${this._y1=e}`;else if(y>Ba)if(!(Math.abs(v*l-m*h)>Ba)||!o)this._append`L${this._x1=a},${this._y1=e}`;else{let C=t-r,S=i-s,_=l*l+m*m,F=C*C+S*S,E=Math.sqrt(_),N=Math.sqrt(y),U=o*Math.tan((Td-Math.acos((_+y-F)/(2*E*N)))/2),j=U/N,B=U/E;Math.abs(j-1)>Ba&&this._append`L${a+j*h},${e+j*v}`,this._append`A${o},${o},0,0,${+(v*C>h*S)},${this._x1=a+B*l},${this._y1=e+B*m}`}}arc(a,e,t,i,o,r){if(a=+a,e=+e,t=+t,r=!!r,t<0)throw new Error(`negative radius: ${t}`);let s=t*Math.cos(i),l=t*Math.sin(i),m=a+s,h=e+l,v=1^r,y=r?i-o:o-i;this._x1===null?this._append`M${m},${h}`:(Math.abs(this._x1-m)>Ba||Math.abs(this._y1-h)>Ba)&&this._append`L${m},${h}`,t&&(y<0&&(y=y%kd+kd),y>Ax?this._append`A${t},${t},0,1,${v},${a-s},${e-l}A${t},${t},0,1,${v},${this._x1=m},${this._y1=h}`:y>Ba&&this._append`A${t},${t},0,${+(y>=Td)},${v},${this._x1=a+t*Math.cos(o)},${this._y1=e+t*Math.sin(o)}`)}rect(a,e,t,i){this._append`M${this._x0=this._x1=+a},${this._y0=this._y1=+e}h${t=+t}v${+i}h${-t}Z`}toString(){return this._}};function tg(){return new Ga}tg.prototype=Ga.prototype;function Wn(n){return function(){return n}}var Dd=Math.abs,Xt=Math.atan2,ma=Math.cos,ig=Math.max,ml=Math.min,nn=Math.sin,za=Math.sqrt,di=1e-12,Ro=Math.PI,kr=Ro/2,ng=2*Ro;function ag(n){return n>1?0:n<-1?Ro:Math.acos(n)}function Ed(n){return n>=1?kr:n<=-1?-kr:Math.asin(n)}function og(n){let a=3;return n.digits=function(e){if(!arguments.length)return a;if(e==null)a=null;else{let t=Math.floor(e);if(!(t>=0))throw new RangeError(`invalid digits: ${e}`);a=t}return n},()=>new Ga(a)}function xx(n){return n.innerRadius}function Sx(n){return n.outerRadius}function wx(n){return n.startAngle}function _x(n){return n.endAngle}function Mx(n){return n&&n.padAngle}function Tx(n,a,e,t,i,o,r,s){var l=e-n,m=t-a,h=r-i,v=s-o,y=v*l-h*m;if(!(y*y<di))return y=(h*(a-o)-v*(n-i))/y,[n+y*l,a+y*m]}function hl(n,a,e,t,i,o,r){var s=n-e,l=a-t,m=(r?o:-o)/za(s*s+l*l),h=m*l,v=-m*s,y=n+h,C=a+v,S=e+h,_=t+v,F=(y+S)/2,E=(C+_)/2,N=S-y,U=_-C,j=N*N+U*U,B=i-o,re=y*_-S*C,pe=(U<0?-1:1)*za(ig(0,B*B*j-re*re)),te=(re*U-N*pe)/j,se=(-re*N-U*pe)/j,de=(re*U+N*pe)/j,ce=(-re*N+U*pe)/j,ue=te-F,me=se-E,Se=de-F,qe=ce-E;return ue*ue+me*me>Se*Se+qe*qe&&(te=de,se=ce),{cx:te,cy:se,x01:-h,y01:-v,x11:te*(i/B-1),y11:se*(i/B-1)}}function Id(){var n=xx,a=Sx,e=Wn(0),t=null,i=wx,o=_x,r=Mx,s=null,l=og(m);function m(){var h,v,y=+n.apply(this,arguments),C=+a.apply(this,arguments),S=i.apply(this,arguments)-kr,_=o.apply(this,arguments)-kr,F=Dd(_-S),E=_>S;if(s||(s=h=l()),C<y&&(v=C,C=y,y=v),!(C>di))s.moveTo(0,0);else if(F>ng-di)s.moveTo(C*ma(S),C*nn(S)),s.arc(0,0,C,S,_,!E),y>di&&(s.moveTo(y*ma(_),y*nn(_)),s.arc(0,0,y,_,S,E));else{var N=S,U=_,j=S,B=_,re=F,pe=F,te=r.apply(this,arguments)/2,se=te>di&&(t?+t.apply(this,arguments):za(y*y+C*C)),de=ml(Dd(C-y)/2,+e.apply(this,arguments)),ce=de,ue=de,me,Se;if(se>di){var qe=Ed(se/y*nn(te)),pt=Ed(se/C*nn(te));(re-=qe*2)>di?(qe*=E?1:-1,j+=qe,B-=qe):(re=0,j=B=(S+_)/2),(pe-=pt*2)>di?(pt*=E?1:-1,N+=pt,U-=pt):(pe=0,N=U=(S+_)/2)}var tt=C*ma(N),Bt=C*nn(N),ri=y*ma(B),Sn=y*nn(B);if(de>di){var Un=C*ma(U),wn=C*nn(U),Za=y*ma(j),zo=y*nn(j),Hi;if(F<Ro)if(Hi=Tx(tt,Bt,Za,zo,Un,wn,ri,Sn)){var Uo=tt-Hi[0],Ho=Bt-Hi[1],Qa=Un-Hi[0],qo=wn-Hi[1],$o=1/nn(ag((Uo*Qa+Ho*qo)/(za(Uo*Uo+Ho*Ho)*za(Qa*Qa+qo*qo)))/2),Nr=za(Hi[0]*Hi[0]+Hi[1]*Hi[1]);ce=ml(de,(y-Nr)/($o-1)),ue=ml(de,(C-Nr)/($o+1))}else ce=ue=0}pe>di?ue>di?(me=hl(Za,zo,tt,Bt,C,ue,E),Se=hl(Un,wn,ri,Sn,C,ue,E),s.moveTo(me.cx+me.x01,me.cy+me.y01),ue<de?s.arc(me.cx,me.cy,ue,Xt(me.y01,me.x01),Xt(Se.y01,Se.x01),!E):(s.arc(me.cx,me.cy,ue,Xt(me.y01,me.x01),Xt(me.y11,me.x11),!E),s.arc(0,0,C,Xt(me.cy+me.y11,me.cx+me.x11),Xt(Se.cy+Se.y11,Se.cx+Se.x11),!E),s.arc(Se.cx,Se.cy,ue,Xt(Se.y11,Se.x11),Xt(Se.y01,Se.x01),!E))):(s.moveTo(tt,Bt),s.arc(0,0,C,N,U,!E)):s.moveTo(tt,Bt),!(y>di)||!(re>di)?s.lineTo(ri,Sn):ce>di?(me=hl(ri,Sn,Un,wn,y,-ce,E),Se=hl(tt,Bt,Za,zo,y,-ce,E),s.lineTo(me.cx+me.x01,me.cy+me.y01),ce<de?s.arc(me.cx,me.cy,ce,Xt(me.y01,me.x01),Xt(Se.y01,Se.x01),!E):(s.arc(me.cx,me.cy,ce,Xt(me.y01,me.x01),Xt(me.y11,me.x11),!E),s.arc(0,0,y,Xt(me.cy+me.y11,me.cx+me.x11),Xt(Se.cy+Se.y11,Se.cx+Se.x11),E),s.arc(Se.cx,Se.cy,ce,Xt(Se.y11,Se.x11),Xt(Se.y01,Se.x01),!E))):s.arc(0,0,y,B,j,E)}if(s.closePath(),h)return s=null,h+""||null}return m.centroid=function(){var h=(+n.apply(this,arguments)+ +a.apply(this,arguments))/2,v=(+i.apply(this,arguments)+ +o.apply(this,arguments))/2-Ro/2;return[ma(v)*h,nn(v)*h]},m.innerRadius=function(h){return arguments.length?(n=typeof h=="function"?h:Wn(+h),m):n},m.outerRadius=function(h){return arguments.length?(a=typeof h=="function"?h:Wn(+h),m):a},m.cornerRadius=function(h){return arguments.length?(e=typeof h=="function"?h:Wn(+h),m):e},m.padRadius=function(h){return arguments.length?(t=h==null?null:typeof h=="function"?h:Wn(+h),m):t},m.startAngle=function(h){return arguments.length?(i=typeof h=="function"?h:Wn(+h),m):i},m.endAngle=function(h){return arguments.length?(o=typeof h=="function"?h:Wn(+h),m):o},m.padAngle=function(h){return arguments.length?(r=typeof h=="function"?h:Wn(+h),m):r},m.context=function(h){return arguments.length?(s=h??null,m):s},m}function ha(n,a,e){this.k=n,this.x=a,this.y=e}ha.prototype={constructor:ha,scale:function(n){return n===1?this:new ha(this.k*n,this.x,this.y)},translate:function(n,a){return n===0&a===0?this:new ha(this.k,this.x+this.k*n,this.y+this.k*a)},apply:function(n){return[n[0]*this.k+this.x,n[1]*this.k+this.y]},applyX:function(n){return n*this.k+this.x},applyY:function(n){return n*this.k+this.y},invert:function(n){return[(n[0]-this.x)/this.k,(n[1]-this.y)/this.k]},invertX:function(n){return(n-this.x)/this.k},invertY:function(n){return(n-this.y)/this.k},rescaleX:function(n){return n.copy().domain(n.range().map(this.invertX,this).map(n.invert,n))},rescaleY:function(n){return n.copy().domain(n.range().map(this.invertY,this).map(n.invert,n))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Pd=new ha(1,0,0);Rd.prototype=ha.prototype;function Rd(n){for(;!n.__zoom;)if(!(n=n.parentNode))return Pd;return n.__zoom}var Dr=!1,kx=250,Dx=["atons.urn:mrn:imo:mmsi:*","shore.basestations.urn:mrn:imo:mmsi:*","vessels.urn:mrn:imo:mmsi:*","sar.urn:mrn:imo:mmsi:*"],Ex=[{prefix:"atons.urn:mrn:imo:mmsi:",type:"aton"},{prefix:"shore.basestations.urn:mrn:imo:mmsi:",type:"basestation"},{prefix:"vessels.urn:mrn:imo:mmsi:",type:"vessel"},{prefix:"sar.urn:mrn:imo:mmsi:",type:"sar"}],Ix="self.navigation.*",rg=(()=>{class n{data=A(st);destroyRef=A(Ie);tracks=new Map;contextIndex=new Map;mmsiIndex=new Map;targetsDirty$=new Zt;_targets=w([]);_ownShip=w({});_hasCollisionRiskData=w(!1);targets=this._targets.asReadonly();ownShip=this._ownShip.asReadonly();hasCollisionRiskData=this._hasCollisionRiskData.asReadonly();getBearingTrue(e,t){if(typeof e.latitude!="number"||typeof e.longitude!="number"||typeof t.latitude!="number"||typeof t.longitude!="number")return null;let i=e.latitude*Math.PI/180,o=t.latitude*Math.PI/180,r=(t.longitude-e.longitude)*Math.PI/180,s=Math.sin(r)*Math.cos(o),l=Math.cos(i)*Math.sin(o)-Math.sin(i)*Math.cos(o)*Math.cos(r),m=Math.atan2(s,l)*180/Math.PI;return this.wrapDegrees(m)}constructor(){wi(...Dx.map(t=>this.data.subscribePathTree(t))).pipe(De(this.destroyRef)).subscribe(t=>this.handleAisTreeUpdate(t)),this.data.subscribePathTree(Ix).pipe(De(this.destroyRef)).subscribe(t=>this.handleOwnShipTreeUpdate(t)),this.targetsDirty$.pipe(Ec(kx,void 0,{leading:!0,trailing:!0}),De(this.destroyRef)).subscribe(()=>this.flushTargetsSignal())}handleAisTreeUpdate(e){let t=this.matchAisContext(e.path);t&&(Dr&&console.debug("[AIS] update",{context:t.context,path:t.path,type:t.type,value:e.update.data.value}),this.applyAisUpdate({context:t.context,type:t.type,path:t.path,value:e.update.data.value,timestampMs:this.toTimestampMs(e.update.data.timestamp)}))}handleOwnShipTreeUpdate(e){if(!e.path.startsWith("self."))return;let t=e.path.slice(5);this.applyOwnShipUpdate(t,e.update.data.value)}matchAisContext(e){for(let t of Ex){if(!e.startsWith(t.prefix))continue;let i=e.indexOf(".",t.prefix.length);return i===-1?null:{context:e.slice(0,i),path:e.slice(i+1),type:t.type}}return null}applyOwnShipUpdate(e,t){let i=Z({},this._ownShip()),o=this.readPositionValue(t);switch(e){case"navigation.position":o&&(i.position=o);break;case"navigation.position.latitude":{let r=this.toNumberOrUndefined(t);if(r===void 0)return;i.position=ge(Z({},i.position??{}),{latitude:r})}break;case"navigation.position.longitude":{let r=this.toNumberOrUndefined(t);if(r===void 0)return;i.position=ge(Z({},i.position??{}),{longitude:r})}break;case"navigation.headingTrue":i.headingTrue=this.toNumberOrUndefined(t);break;case"navigation.courseOverGroundTrue":i.courseOverGroundTrue=this.toNumberOrUndefined(t);break;case"navigation.speedOverGround":i.speedOverGround=this.toNumberOrUndefined(t);break;default:return}this._ownShip.set(i)}applyAisUpdate(e){let t=this.resolveTrack(e);if(!t)return;t.lastUpdateAt=e.timestampMs,e.path.startsWith("navigation.closestApproach.")&&this.isVesselLike(t)&&!t.closestApproach&&(t.closestApproach={});let i=!1;({mmsi:()=>this.applyMmsi(t,e.value),name:()=>{t.name=this.toStringOrUndefined(e.value)},"communication.callsignVhf":()=>{this.isVesselLike(t)&&(t.callsign=this.toStringOrUndefined(e.value))},"navigation.destination":()=>{this.isVesselLike(t)&&(t.destination=this.toStringOrUndefined(e.value))},"navigation.destination.commonName":()=>{this.isVesselLike(t)&&(t.destination=this.toStringOrUndefined(e.value))},"navigation.destination.eta":()=>{this.isVesselLike(t)&&(t.eta=this.toStringOrUndefined(e.value))},"design.beam":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{beam:this.toNumberOrUndefined(e.value)}))},"design.length.overall":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{length:ge(Z({},t.design?.length??{}),{overall:this.toNumberOrUndefined(e.value)})}))},"design.length.hull":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{length:ge(Z({},t.design?.length??{}),{hull:this.toNumberOrUndefined(e.value)})}))},"design.length.waterline":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{length:ge(Z({},t.design?.length??{}),{waterline:this.toNumberOrUndefined(e.value)})}))},"design.draft.maximum":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{draft:ge(Z({},t.design?.draft??{}),{maximum:this.toNumberOrUndefined(e.value)})}))},"design.draft.minimum":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{draft:ge(Z({},t.design?.draft??{}),{minimum:this.toNumberOrUndefined(e.value)})}))},"design.draft.current":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{draft:ge(Z({},t.design?.draft??{}),{current:this.toNumberOrUndefined(e.value)})}))},"design.draft.canoe":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{draft:ge(Z({},t.design?.draft??{}),{canoe:this.toNumberOrUndefined(e.value)})}))},"registrations.imo":()=>{this.isVesselLike(t)&&(t.imo=this.toStringOrUndefined(e.value))},"navigation.courseOverGroundTrue":()=>{this.isVesselLike(t)&&(t.courseOverGroundTrue=this.toNumberOrUndefined(e.value))},"navigation.headingTrue":()=>{this.isVesselLike(t)&&(t.headingTrue=this.toNumberOrUndefined(e.value))},"navigation.rateOfTurn":()=>{this.isVesselLike(t)&&(t.rateOfTurn=this.toNumberOrUndefined(e.value))},"navigation.specialManeuver":()=>{this.isVesselLike(t)&&(t.specialManeuver=this.toStringOrUndefined(e.value))},"navigation.speedOverGround":()=>{this.isVesselLike(t)&&(t.speedOverGround=this.toNumberOrUndefined(e.value))},"navigation.state":()=>{this.isVesselLike(t)&&(t.navState=this.toStringOrUndefined(e.value))},"sensors.ais.class":()=>{t.ais.class=this.normalizeAisClass(e.value)},"sensors.ais.status":()=>{let r=this.normalizeAisStatus(e.value);if(r){if(r==="remove"){this.removeTrack(t),i=!0;return}t.ais.status=r}},"sensors.ais.fromBow":()=>{this.isVesselLike(t)&&(t.fromBow=this.toNumberOrUndefined(e.value))},"sensors.ais.fromCenter":()=>{this.isVesselLike(t)&&(t.fromCenter=this.toNumberOrUndefined(e.value))},"navigation.position.latitude":()=>{let r=this.toNumberOrUndefined(e.value);r!==void 0&&(t.position=ge(Z({},t.position??{}),{latitude:r}),t.lastPositionAt=e.timestampMs)},"navigation.position.longitude":()=>{let r=this.toNumberOrUndefined(e.value);r!==void 0&&(t.position=ge(Z({},t.position??{}),{longitude:r}),t.lastPositionAt=e.timestampMs)},"navigation.position.altitude":()=>{let r=this.toNumberOrUndefined(e.value);t.position&&(t.position=ge(Z({},t.position),{altitude:r}))},"navigation.position":()=>{let r=this.readPositionValue(e.value);r&&(t.position=r,t.lastPositionAt=e.timestampMs)},"atonType.id":()=>{this.isAton(t)&&(t.typeId=this.toNumberOrUndefined(e.value))},"atonType.name":()=>{this.isAton(t)&&(t.typeName=this.toStringOrUndefined(e.value))},virtual:()=>{this.isAton(t)&&(t.virtual=!!e.value)},offPosition:()=>{this.isAton(t)&&(t.offPosition=!!e.value)},"design.aisShipType.id":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{aisShipType:ge(Z({},t.design?.aisShipType??{}),{id:this.toNumberOrUndefined(e.value)})}))},"design.aisShipType.name":()=>{this.isVesselLike(t)&&(t.design=ge(Z({},t.design??{}),{aisShipType:ge(Z({},t.design?.aisShipType??{}),{name:this.toStringOrUndefined(e.value)})}))},"navigation.closestApproach.distance":()=>{this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.distance=this.toNumberOrUndefined(e.value))},"navigation.closestApproach.timeTo":()=>{this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.timeTo=this.toNumberOrUndefined(e.value))},"navigation.closestApproach.range":()=>{this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.range=this.toNumberOrUndefined(e.value))},"navigation.closestApproach.bearing":()=>{this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.bearing=this.toNumberOrUndefined(e.value))},"navigation.closestApproach.collisionRiskRating":()=>{this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.collisionRiskRating=this.toNumberOrUndefined(e.value))}})[e.path]?.(),!i&&this.updateTargetsSignal()}resolveTrack(e){let t=this.contextIndex.get(e.context),i=e.timestampMs,o=t?this.tracks.get(t):null;if(o)return o;let r=this.createTrack(e.context,e.type,i,void 0);return this.contextIndex.set(e.context,r.id),r}createTrack(e,t,i,o){let r=this.buildTrackId(o??e),s=this.buildBaseTarget(e,t,i,o,r),l;switch(t){case"vessel":l=ge(Z({},s),{type:"vessel",closestApproach:{}});break;case"sar":l=ge(Z({},s),{type:"sar",closestApproach:{}});break;case"aton":l=ge(Z({},s),{type:"aton"});break;default:l=ge(Z({},s),{type:"basestation"});break}return this.tracks.set(l.id,l),o&&this.addMmsiIndex(o,l.id),this.updateTargetsSignal(),l}buildTrackId(e){if(!this.tracks.has(e))return e;let t=1;for(;this.tracks.has(`${e}-${t}`);)t+=1;return`${e}-${t}`}applyMmsi(e,t){let i=this.toStringOrUndefined(t);if(!i)return;let o=this.getTracksByMmsi(i).filter(r=>r.id!==e.id);o.length&&(this.markConflict(i),Dr&&console.error("[AIS] MMSI conflict",{mmsi:i,contexts:[e.context,...o.map(r=>r.context)]})),e.mmsi&&e.mmsi!==i&&this.removeMmsiIndex(e.mmsi,e.id),e.mmsi=i,this.addMmsiIndex(i,e.id)}removeTrack(e){this.tracks.delete(e.id),e.mmsi&&this.removeMmsiIndex(e.mmsi,e.id);for(let[t,i]of this.contextIndex.entries())i===e.id&&this.contextIndex.delete(t);Dr&&console.debug("[AIS] removed",{id:e.id,mmsi:e.mmsi,status:e.ais.status}),this.updateTargetsSignal()}updateTargetsSignal(){this.targetsDirty$.next()}flushTargetsSignal(){let e=Array.from(this.tracks.values()).filter(i=>!!i.mmsi||!!i.position),t=e.some(i=>{if(!this.isVesselLike(i))return!1;let o=i.closestApproach??{};return Object.prototype.hasOwnProperty.call(o,"collisionRiskRating")});this._targets.set(e),this._hasCollisionRiskData.set(t),Dr&&console.debug("[AIS] flush",{count:this.tracks.size})}getTracksByMmsi(e){let t=this.mmsiIndex.get(e);return t?Array.from(t).map(i=>this.tracks.get(i)).filter(i=>!!i):[]}addMmsiIndex(e,t){this.mmsiIndex.has(e)||this.mmsiIndex.set(e,new Set),this.mmsiIndex.get(e).add(t)}removeMmsiIndex(e,t){let i=this.mmsiIndex.get(e);i&&(i.delete(t),i.size||this.mmsiIndex.delete(e))}markConflict(e){let t=this.getTracksByMmsi(e);for(let i of t)i.conflicted=!0}normalizeAisClass(e){let t=typeof e=="string"?e.toUpperCase():"";if(t==="A")return"A";if(t==="B")return"B"}normalizeAisStatus(e){if(e==null)return;let t=String(e).toLowerCase();if(t==="unconfirmed"||t==="confirmed"||t==="lost"||t==="remove")return t}toTimestampMs(e){if(!e)return Date.now();let t=e instanceof Date?e.getTime():Date.parse(e);return Number.isFinite(t)?t:Date.now()}toNumberOrUndefined(e){let t=Number(e);return Number.isFinite(t)?t:void 0}toStringOrUndefined(e){if(e==null)return;let t=String(e).trim();return t.length?t:void 0}wrapDegrees(e){let t=e%360;return t<0?t+360:t}buildBaseTarget(e,t,i,o,r){return{id:r,context:e,type:t,ais:{class:void 0,status:"unconfirmed"},conflicted:!1,mmsi:o,position:void 0,lastUpdateAt:i,lastPositionAt:void 0}}isVesselLike(e){return e.type==="vessel"||e.type==="sar"}isAton(e){return e.type==="aton"}readPositionValue(e){if(!e||typeof e!="object")return;let t=this.toNumberOrUndefined(e.latitude),i=this.toNumberOrUndefined(e.longitude);if(t===void 0||i===void 0)return;let o=this.toNumberOrUndefined(e.altitude);return{latitude:t,longitude:i,altitude:o}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function Px(n,a){if(n&1&&(d(0,"div",3)(1,"span",13),c(2),u()()),n&2){T();let e=En(0),t=En(1);f(2),Ut("",t," ",e)}}function Rx(n,a){if(n&1&&(d(0,"div",4)(1,"span",7),c(2,"State"),u(),d(3,"span",10),c(4),ut(5,"titlecase"),u()()),n&2){let e=T(4);f(4),Ut("",Et(5,2,e.target.navState?`${e.target.navState}`:""),"",e.target.specialManeuver==="not available"?"":`, ${e.target.specialManeuver}`)}}function Nx(n,a){n&1&&(d(0,"div",5),O(1,"mat-divider"),u())}function Ox(n,a){if(n&1&&(d(0,"div",6)(1,"span",7),c(2,"Bearing"),u(),d(3,"span",8),c(4),u()(),d(5,"div",6)(6,"span",7),c(7,"Range"),u(),d(8,"span",8),c(9),u()(),d(10,"div",6)(11,"span",7),c(12,"CPA"),u(),d(13,"span",8),c(14),u()(),d(15,"div",6)(16,"span",7),c(17,"TCPA"),u(),d(18,"span",8),c(19),u()(),d(20,"div",3),O(21,"mat-divider"),u()),n&2){let e=T(4);f(4),Q(e.formatAngleWithUnit(e.target.closestApproach==null?null:e.target.closestApproach.bearing)),f(5),Q(e.formatNauticalMilesWithUnit(e.target.closestApproach==null?null:e.target.closestApproach.range)),f(5),Q(e.formatNauticalMilesWithUnit(e.target.closestApproach==null?null:e.target.closestApproach.distance)),f(5),Q(e.formatRemainingTime(e.target.closestApproach==null?null:e.target.closestApproach.timeTo))}}function Vx(n,a){if(n&1&&(d(0,"div",3)(1,"span",7),c(2,"ETA"),u(),d(3,"span",8),c(4),u()()),n&2){let e=T(4);f(4),Q(e.formatText(e.target.eta))}}function Lx(n,a){if(n&1&&(Ma(0)(1),I(2,Px,3,2,"div",3),I(3,Rx,6,4,"div",4),I(4,Nx,2,0,"div",5),I(5,Ox,22,4),d(6,"div",6)(7,"span",7),c(8,"COG"),u(),d(9,"span",8),c(10),d(11,"span",9),c(12,"T"),u()()(),d(13,"div",6)(14,"span",7),c(15,"SOG"),u(),d(16,"span",8),c(17),ut(18,"number"),u()(),d(19,"div",6)(20,"span",7),c(21,"HDG"),u(),d(22,"span",8),c(23),d(24,"span",9),c(25,"T"),u()()(),d(26,"div",6)(27,"span",7),c(28,"ROT"),u(),d(29,"span",8),c(30),u()(),d(31,"div",3),O(32,"mat-divider"),u(),d(33,"div",6)(34,"span",7),c(35,"IMO"),u(),d(36,"span",8),c(37),u()(),d(38,"div",6)(39,"span",7),c(40,"MMSI"),u(),d(41,"span",8),c(42),u()(),d(43,"div",6)(44,"span",7),c(45,"VHF Callsign"),u(),d(46,"span",8),c(47),u()(),d(48,"div",6)(49,"span",7),c(50,"AIS Class"),u(),d(51,"span",8),c(52),u()(),d(53,"div",4)(54,"span",7),c(55,"Destination"),u(),d(56,"span",10),c(57),u()(),I(58,Vx,5,1,"div",3),d(59,"div",3),O(60,"mat-divider"),u(),d(61,"div",6)(62,"span",7),c(63,"Latitude"),u(),d(64,"span",8),c(65),u()(),d(66,"div",6)(67,"span",7),c(68,"Longitude"),u(),d(69,"span",8),c(70),u()(),d(71,"div",11)(72,"span",12),c(73),u()()),n&2){let e=T(3),t=Dn(!(e.target.design==null||e.target.design.aisShipType==null)&&e.target.design.aisShipType.name?`${e.target.design.aisShipType.name}`:""),i=!(e.target.design==null||e.target.design.length==null)&&e.target.design.length.overall?`${e.target.design.length.overall}m`:"?m",o=e.target.design!=null&&e.target.design.beam?`${e.target.design.beam}m`:"?m";f(),Dn(i&&o?`${i} x ${o}`:""),f(),P(!(e.target.design==null||e.target.design.length==null)&&e.target.design.length.overall||e.target.design!=null&&e.target.design.beam||t?2:-1),f(),P(e.target.navState||e.target.specialManeuver?3:-1),f(),P(!(e.target.design==null||e.target.design.length==null)&&e.target.design.length.overall||e.target.design!=null&&e.target.design.beam||t||e.target.navState||e.target.specialManeuver?4:-1),f(),P(e.hasClosestApproach(e.target.closestApproach)?5:-1),f(5),be("",e.formatDirection(e.target.courseOverGroundTrue),"\xB0 "),f(7),be("",In(18,19,e.target.speedOverGround,"1.1-1")," kn"),f(6),be("",e.formatDirection(e.target.headingTrue),"\xB0 "),f(7),Q(e.formatRateOfTurn(e.target.rateOfTurn)),f(7),Q(e.formatText(e.target.imo)),f(5),Q(e.formatText(e.target.mmsi)),f(5),Q(e.formatText(e.target.callsign)),f(5),Q(e.formatText(e.target.ais.class)),f(5),Q(e.formatText(e.target.destination)),f(),P(e.target.eta?58:-1),f(7),Q(e.formatLatLon(e.target.position==null?null:e.target.position.latitude,"latitudeMin")),f(5),Q(e.formatLatLon(e.target.position==null?null:e.target.position.longitude,"longitudeMin")),f(3),be("Received ",e.formatSinceTimestamp(e.target.lastPositionAt)," ago")}}function Wx(n,a){if(n&1&&I(0,Lx,74,22),n&2){let e=T(2);P(e.isVesselLike(e.target)?0:-1)}}function Fx(n,a){if(n&1&&(d(0,"div",3)(1,"span",13),c(2),u()()),n&2){T();let e=En(0),t=En(1);f(2),Ut("",t," ",e)}}function Bx(n,a){if(n&1&&(d(0,"div",4)(1,"span",7),c(2,"State"),u(),d(3,"span",10),c(4),ut(5,"titlecase"),u()()),n&2){let e=T(4);f(4),Ut("",Et(5,2,e.target.navState?`${e.target.navState}`:""),"",e.target.specialManeuver==="not available"?"":`, ${e.target.specialManeuver}`)}}function Gx(n,a){n&1&&(d(0,"div",5),O(1,"mat-divider"),u())}function zx(n,a){if(n&1&&(d(0,"div",6)(1,"span",7),c(2,"Bearing"),u(),d(3,"span",8),c(4),u()(),d(5,"div",6)(6,"span",7),c(7,"Range"),u(),d(8,"span",8),c(9),u()(),d(10,"div",6)(11,"span",7),c(12,"CPA"),u(),d(13,"span",8),c(14),u()(),d(15,"div",6)(16,"span",7),c(17,"TCPA"),u(),d(18,"span",8),c(19),u()(),d(20,"div",3),O(21,"mat-divider"),u()),n&2){let e=T(4);f(4),Q(e.formatAngleWithUnit(e.target.closestApproach==null?null:e.target.closestApproach.bearing)),f(5),Q(e.formatNauticalMilesWithUnit(e.target.closestApproach==null?null:e.target.closestApproach.range)),f(5),Q(e.formatNauticalMilesWithUnit(e.target.closestApproach==null?null:e.target.closestApproach.distance)),f(5),Q(e.formatRemainingTime(e.target.closestApproach==null?null:e.target.closestApproach.timeTo))}}function Ux(n,a){if(n&1&&(d(0,"div",3)(1,"span",7),c(2,"ETA"),u(),d(3,"span",8),c(4),u()()),n&2){let e=T(4);f(4),Q(e.formatText(e.target.eta))}}function Hx(n,a){if(n&1&&(Ma(0)(1),I(2,Fx,3,2,"div",3),I(3,Bx,6,4,"div",4),I(4,Gx,2,0,"div",5),I(5,zx,22,4),d(6,"div",6)(7,"span",7),c(8,"COG"),u(),d(9,"span",8),c(10),d(11,"span",9),c(12,"T"),u()()(),d(13,"div",6)(14,"span",7),c(15,"SOG"),u(),d(16,"span",8),c(17),ut(18,"number"),u()(),d(19,"div",6)(20,"span",7),c(21,"HDG"),u(),d(22,"span",8),c(23),d(24,"span",9),c(25,"T"),u()()(),d(26,"div",6)(27,"span",7),c(28,"ROT"),u(),d(29,"span",8),c(30),u()(),d(31,"div",3),O(32,"mat-divider"),u(),d(33,"div",6)(34,"span",7),c(35,"IMO"),u(),d(36,"span",8),c(37),u()(),d(38,"div",6)(39,"span",7),c(40,"MMSI"),u(),d(41,"span",8),c(42),u()(),d(43,"div",6)(44,"span",7),c(45,"VHF Callsign"),u(),d(46,"span",8),c(47),u()(),d(48,"div",6)(49,"span",7),c(50,"AIS Class"),u(),d(51,"span",8),c(52),u()(),d(53,"div",4)(54,"span",7),c(55,"Destination"),u(),d(56,"span",10),c(57),u()(),I(58,Ux,5,1,"div",3),d(59,"div",3),O(60,"mat-divider"),u(),d(61,"div",6)(62,"span",7),c(63,"Latitude"),u(),d(64,"span",8),c(65),u()(),d(66,"div",6)(67,"span",7),c(68,"Longitude"),u(),d(69,"span",8),c(70),u()(),d(71,"div",11)(72,"span",12),c(73),u()()),n&2){let e=T(3),t=Dn(!(e.target.design==null||e.target.design.aisShipType==null)&&e.target.design.aisShipType.name?`${e.target.design.aisShipType.name}`:""),i=!(e.target.design==null||e.target.design.length==null)&&e.target.design.length.overall?`${e.target.design.length.overall}m`:"?m",o=e.target.design!=null&&e.target.design.beam?`${e.target.design.beam}m`:"?m";f(),Dn(i&&o?`${i} x ${o}`:""),f(),P(!(e.target.design==null||e.target.design.length==null)&&e.target.design.length.overall||e.target.design!=null&&e.target.design.beam||t?2:-1),f(),P(e.target.navState||e.target.specialManeuver?3:-1),f(),P(!(e.target.design==null||e.target.design.length==null)&&e.target.design.length.overall||e.target.design!=null&&e.target.design.beam||t||e.target.navState||e.target.specialManeuver?4:-1),f(),P(e.hasClosestApproach(e.target.closestApproach)?5:-1),f(5),be("",e.formatDirection(e.target.courseOverGroundTrue),"\xB0 "),f(7),be("",In(18,19,e.target.speedOverGround,"1.1-1")," kn"),f(6),be("",e.formatDirection(e.target.headingTrue),"\xB0 "),f(7),Q(e.formatRateOfTurn(e.target.rateOfTurn)),f(7),Q(e.formatText(e.target.imo)),f(5),Q(e.formatText(e.target.mmsi)),f(5),Q(e.formatText(e.target.callsign)),f(5),Q(e.formatText(e.target.ais.class)),f(5),Q(e.formatText(e.target.destination)),f(),P(e.target.eta?58:-1),f(7),Q(e.formatLatLon(e.target.position==null?null:e.target.position.latitude,"latitudeMin")),f(5),Q(e.formatLatLon(e.target.position==null?null:e.target.position.longitude,"longitudeMin")),f(3),be("Received ",e.formatSinceTimestamp(e.target.lastPositionAt)," ago")}}function qx(n,a){if(n&1&&I(0,Hx,74,22),n&2){let e=T(2);P(e.isVesselLike(e.target)?0:-1)}}function $x(n,a){if(n&1&&(d(0,"div",3)(1,"span",13),c(2),u()(),d(3,"div",4)(4,"span",7),c(5,"Off Position"),u(),d(6,"span",8),c(7),u()(),d(8,"div",6)(9,"span",7),c(10,"Type"),u(),d(11,"span",8),c(12,"Aid to Navigation"),u()(),d(13,"div",6)(14,"span",7),c(15,"Type ID"),u(),d(16,"span",8),c(17),u()(),d(18,"div",3),O(19,"mat-divider"),u(),d(20,"div",6)(21,"span",7),c(22,"MMSI"),u(),d(23,"span",8),c(24),u()(),d(25,"div",6)(26,"span",7),c(27,"Status"),u(),d(28,"span",8),c(29),ut(30,"titlecase"),u()(),d(31,"div",3),O(32,"mat-divider"),u(),d(33,"div",6)(34,"span",7),c(35,"Latitude"),u(),d(36,"span",8),c(37),u()(),d(38,"div",6)(39,"span",7),c(40,"Longitude"),u(),d(41,"span",8),c(42),u()(),d(43,"div",11)(44,"span",12),c(45),u()()),n&2){let e=T(3);f(2),Q(e.formatText(e.target.name)),f(5),Q(e.target.offPosition?"Yes":"No"),f(10),Q(e.formatText(e.target.typeId==null?null:e.target.typeId.toString())),f(7),Q(e.formatText(e.target.mmsi)),f(5),Q(Et(30,8,e.target.ais.status)),f(8),Q(e.formatLatLon(e.target.position==null?null:e.target.position.latitude,"latitudeMin")),f(5),Q(e.formatLatLon(e.target.position==null?null:e.target.position.longitude,"longitudeMin")),f(3),be("Received ",e.formatSinceTimestamp(e.target.lastPositionAt)," ago")}}function jx(n,a){if(n&1&&I(0,$x,46,10),n&2){let e=T(2);P(e.isAton(e.target)?0:-1)}}function Yx(n,a){if(n&1&&(d(0,"div",6)(1,"span",7),c(2,"Name"),u(),d(3,"span",8),c(4),u()(),d(5,"div",6)(6,"span",7),c(7,"MMSI"),u(),d(8,"span",8),c(9),u()(),d(10,"div",6)(11,"span",7),c(12,"Status"),u(),d(13,"span",8),c(14),ut(15,"titlecase"),u()(),d(16,"div",6)(17,"span",7),c(18,"AIS Class"),u(),d(19,"span",8),c(20),u()(),d(21,"div",3),O(22,"mat-divider"),u(),d(23,"div",6)(24,"span",7),c(25,"Latitude"),u(),d(26,"span",8),c(27),u()(),d(28,"div",6)(29,"span",7),c(30,"Longitude"),u(),d(31,"span",8),c(32),u()(),d(33,"div",11)(34,"span",12),c(35),u()()),n&2){let e=T(3);f(4),Q(e.formatText(e.target.name)),f(5),Q(e.formatText(e.target.mmsi)),f(5),Q(Et(15,7,e.target.ais.status)),f(6),Q(e.formatText(e.target.ais.class)),f(7),Q(e.formatLatLon(e.target.position==null?null:e.target.position.latitude,"latitudeMin")),f(5),Q(e.formatLatLon(e.target.position==null?null:e.target.position.longitude,"longitudeMin")),f(3),be("Received ",e.formatSinceTimestamp(e.target.lastPositionAt)," ago")}}function Kx(n,a){if(n&1&&I(0,Yx,36,9),n&2){let e=T(2);P(e.isBasestation(e.target)?0:-1)}}function Xx(n,a){if(n&1&&(d(0,"div",0)(1,"div",2),I(2,Wx,1,1)(3,qx,1,1)(4,jx,1,1)(5,Kx,1,1),u()()),n&2){let e,t=T();f(2),P((e=t.target.type)==="vessel"?2:e==="sar"?3:e==="aton"?4:e==="basestation"?5:-1)}}function Zx(n,a){n&1&&(d(0,"div",1),c(1,"No AIS target selected."),u())}var pl=(()=>{class n{static CLOCK_INTERVAL_MS=1e3;data=A(pi);units=A(He);ngZone=A(Je);now=w(Date.now());nowTimer=null;constructor(){this.startClock()}get payload(){return this.data?.payload??null}get target(){return this.payload?.target??null}formatDirection(e){return e==null||!Number.isFinite(e)?"--":this.units.convertToUnit("deg",e).toFixed(0)}formatNauticalMilesWithUnit(e){return e==null||!Number.isFinite(e)?"--":`${this.units.convertToUnit("nm",e).toFixed(1)} nm`}formatAngleWithUnit(e){return e==null||!Number.isFinite(e)?"--":`${e.toFixed(0)}\xB0`}formatRemainingTime(e){if(e==null||!Number.isFinite(e))return"--";let t=Math.max(0,Math.round(e)),i=Math.floor(t/3600),o=Math.floor(t%3600/60),r=t%60;return i>0?`${i}:${String(o).padStart(2,"0")}:${String(r).padStart(2,"0")}`:`${o}:${String(r).padStart(2,"0")}`}formatSinceTimestamp(e){if(e==null||!Number.isFinite(e))return"--";let t=Math.max(0,Math.floor((this.now()-e)/1e3)),i=Math.floor(t/3600),o=Math.floor(t%3600/60),r=t%60;return i>0?`${i}:${String(o).padStart(2,"0")}:${String(r).padStart(2,"0")}`:`${o}:${String(r).padStart(2,"0")}`}formatRateOfTurn(e){if(e==null||!Number.isFinite(e))return"--";let t=e>=0?"Stb":"Port",i=Math.abs(e)*(180/Math.PI)*60;return`${t} ${i.toFixed(0)}\xB0/min`}formatLatLon(e,t){return e==null||!Number.isFinite(e)?"--":this.units.convertToUnit(t,e).toString()}formatText(e){return e&&e.length?e:"--"}hasClosestApproach(e){return e?typeof e.bearing=="number"||typeof e.range=="number"||typeof e.distance=="number"||typeof e.timeTo=="number":!1}isVesselLike(e){return e.type==="vessel"||e.type==="sar"}isAton(e){return e.type==="aton"}isBasestation(e){return e.type==="basestation"}startClock(){this.ngZone.runOutsideAngular(()=>{this.nowTimer=window.setInterval(()=>{this.ngZone.run(()=>{this.now.set(Date.now())})},n.CLOCK_INTERVAL_MS)})}ngOnDestroy(){this.nowTimer!==null&&(clearInterval(this.nowTimer),this.nowTimer=null)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["dialog-ais-target"]],decls:2,vars:1,consts:[[1,"ais-dialog","mat-typography"],[1,"ais-dialog-empty"],[1,"ais-dialog-grid"],[1,"ais-dialog-item","ais-dialog-item-span"],[1,"ais-dialog-long-item","ais-dialog-item-span"],[1,"ais-dialog-item","ais-dialog-item-span","ais-divider"],[1,"ais-dialog-item"],[1,"ais-dialog-key","mat-subtitle-2"],[1,"ais-dialog-value","mat-body-2"],[2,"font-size","10px"],[1,"ais-dialog-long-value","mat-body-2"],[1,"ais-dialog-item",2,"grid-column","span 2"],[1,"ais-dialog-value","mat-body-4",2,"grid-column","span 2","text-align","center"],[1,"ais-vessel-description"]],template:function(t,i){t&1&&I(0,Xx,6,1,"div",0)(1,Zx,2,0,"div",1),t&2&&P(i.target?0:1)},dependencies:[Qt,Wi,Li,hn,io],styles:[".ais-dialog-panel .mat-mdc-dialog-container{--mat-dialog-content-padding: 0px 24px 20px 24px}.ais-dialog[_ngcontent-%COMP%]{display:grid;gap:8px;color:var(--kip-contrast-color)}.ais-dialog-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 14px}.ais-vessel-description[_ngcontent-%COMP%]{grid-column:span 2;font-size:var(--mat-sys-body-large-size)}.ais-dialog-long-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;align-items:baseline;gap:6px}.ais-dialog-long-value[_ngcontent-%COMP%]{grid-column:span 3;color:var(--kip-contrast-color)}.ais-dialog-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;align-items:baseline;gap:6px}.ais-divider[_ngcontent-%COMP%]{margin-top:6px}.ais-dialog-item[_ngcontent-%COMP%] mat-divider[_ngcontent-%COMP%]{grid-column:1/-1}.ais-dialog-item-span[_ngcontent-%COMP%]{grid-column:span 2}.ais-dialog-key[_ngcontent-%COMP%]{color:var(--kip-contrast-dim-color);letter-spacing:.04em}.ais-dialog-value[_ngcontent-%COMP%], .ais-dialog-empty[_ngcontent-%COMP%]{color:var(--kip-contrast-color)}"],changeDetection:0})}return n})();var Qx=["radarSvg"],Jx=["menuAnchor"],eS=["menuTrigger"],tS=(n,a)=>a.id;function iS(n,a){n&1&&(oe(),d(0,"svg",7),O(1,"path",17),d(2,"text",18),c(3,"N"),u()())}function nS(n,a){n&1&&(oe(),d(0,"svg",7),O(1,"path",19),u())}function aS(n,a){if(n&1){let e=we();d(0,"button",20),$("click",function(){ne(e);let i=T();return ae(i.toggleFilter("noCollisionRisk"))}),d(1,"mat-icon"),c(2,"security"),u()()}if(n&2){let e=T();dt("is-active",e.isFilterEnabled("noCollisionRisk"))}}function oS(n,a){if(n&1){let e=we();d(0,"button",22),$("click",function(){let i=ne(e).$implicit,o=T(2);return ae(o.onMenuItemSelect(i))}),O(1,"img",23),d(2,"span",24),c(3),u()()}if(n&2){let e=a.$implicit;f(),Te("visibility",e.iconHref?"visible":"hidden"),ie("src",e.iconHref??null,Kr),f(2),Q(e.label)}}function rS(n,a){if(n&1&&ye(0,oS,4,4,"button",21,tS),n&2){let e=T();Ae(e.menuItems())}}function sS(n,a){if(n&1){let e=we();d(0,"button",25),c(1,"Filter Targets"),u(),d(2,"button",26),$("click",function(){ne(e);let i=T();return ae(i.toggleFilter("anchoredMoored"))}),d(3,"mat-icon",27),c(4),u(),d(5,"span"),c(6,"Anchored/Moored"),u()(),d(7,"button",26),$("click",function(){ne(e);let i=T();return ae(i.toggleFilter("allAton"))}),d(8,"mat-icon",27),c(9),u(),d(10,"span"),c(11,"All AtoN"),u()(),d(12,"button",26),$("click",function(){ne(e);let i=T();return ae(i.toggleFilter("allButSar"))}),d(13,"mat-icon",27),c(14),u(),d(15,"span"),c(16,"All but SAR"),u()(),d(17,"button",26),$("click",function(){ne(e);let i=T();return ae(i.toggleFilter("allVessels"))}),d(18,"mat-icon",27),c(19),u(),d(20,"span"),c(21,"All Vessels"),u()(),d(22,"button",28)(23,"span"),c(24,"Vessel Type"),u(),d(25,"mat-icon"),c(26,"chevron_right"),u()()}if(n&2){let e=T(),t=Lt(26);f(4),be(" ",e.isFilterEnabled("anchoredMoored")?"check_box":"check_box_outline_blank"," "),f(5),be(" ",e.isFilterEnabled("allAton")?"check_box":"check_box_outline_blank"," "),f(5),be(" ",e.isFilterEnabled("allButSar")?"check_box":"check_box_outline_blank"," "),f(5),be(" ",e.isFilterEnabled("allVessels")?"check_box":"check_box_outline_blank"," "),f(3),R("matMenuTriggerFor",t)}}function lS(n,a){if(n&1){let e=we();d(0,"button",26),$("click",function(){let i=ne(e).$implicit,o=T(2);return ae(o.toggleVesselTypeFilter(i))}),d(1,"mat-icon",27),c(2),u(),d(3,"span"),c(4),u()()}if(n&2){let e=a.$implicit,t=T(2);f(2),be(" ",t.isVesselTypeFilterEnabled(e)?"check_box":"check_box_outline_blank"," "),f(2),Q(t.formatVesselTypeLabel(e))}}function dS(n,a){if(n&1&&ye(0,lS,5,2,"button",29,zt),n&2){let e=T();Ae(e.vesselTypeFilters)}}function cS(n,a){n&1&&O(0,"div",16)}var sg=(()=>{class n{static TARGET_ICON_SIZE_PX=16;static OWN_SHIP_ICON_SIZE_PX=84;static HIT_RADIUS_PX=28;static ICON_RENDER_DEBOUNCE_MS=50;id=x.required();type=x.required();theme=x.required();runtime=A(xe);ais=A(rg);dialog=A(lg);ngZone=A(Je);units=A(He);settings=A(Ht);toast=A(gn);dashboard=A(Tt);static DEFAULT_CONFIG={filterSelfPaths:!1,enableTimeout:!1,dataTimeout:5,ais:{filters:{anchoredMoored:!1,noCollisionRisk:!1,allAton:!1,allButSar:!1,allVessels:!1,vesselTypes:[]},viewMode:"course-up",rangeRings:[1,3,6,12,24,48],rangeIndex:"3",showCogVectors:!0,cogVectorsMinutes:10,showLostTargets:!0,showUnconfirmedTargets:!0,showSelf:!0},color:"grey"};svgRef=he.required("radarSvg");menuAnchorRef=he.required("menuAnchor");menuTrigger=he.required("menuTrigger");hostSize=w(null);renderState=null;selectedId=w(null);localViewMode=w(null);localRangeIndex=w(null);effectiveViewMode=L(()=>this.localViewMode()??this.runtime.options()?.ais?.viewMode??"course-up");effectiveRangeIndex=L(()=>{let e=this.resolveRangeIndex(this.runtime.options()?.ais),t=this.runtime.options()?.ais?.rangeRings??[3,6,12,24,48],i=Math.max(0,t.length-1),o=this.localRangeIndex()??e;return Math.min(Math.max(o,0),i)});svg;root;ringsLayer;vectorsLayer;targetsLayer;selectedLayer;ownShipLayer;viewRotationSmoothed=null;lastRotationAt=null;renderFrame=null;iconRenderTimer=null;iconCache=new Map;targetCache=new Map;lastOriginKey=null;ringCache=null;ownShipIconHref=null;menuItems=w([]);menuPoint=null;lastRenderTargets=[];lastRenderScale=1;lastRenderSize=null;hitRadiusPx=n.HIT_RADIUS_PX;lastFiltersSignature=null;lastRenderSignature=null;filterState=w({anchoredMoored:!1,noCollisionRisk:!1,allAton:!1,allButSar:!1,allVessels:!1,vesselTypes:new Set});vesselTypeFilters=Es.filter(e=>e!=="vessel/self"&&e!=="vessel/unknown"&&e!=="vessel/spare");hasActiveFilters=L(()=>{let e=this.filterState();return e.anchoredMoored||e.allAton||e.allButSar||e.allVessels||e.vesselTypes.size>0});hasCollisionRiskData=this.ais.hasCollisionRiskData;constructor(){this.warnIfRemoteDataDisabled(),this.loadOwnShipIcon(),W(()=>{let e=this.hostSize(),t=this.runtime.options(),i=this.theme(),o=this.ais.targets(),r=this.ais.ownShip();!e||!t||!i||(z(()=>{this.renderState={size:e,cfg:t,theme:i,targets:o,ownShip:r},this.syncFiltersFromConfig(t)}),this.scheduleRender())}),W(()=>{this.localViewMode(),this.localRangeIndex(),this.selectedId(),this.filterState(),z(()=>{this.scheduleRender()})})}warnIfRemoteDataDisabled(){this.settings.signalKSubscribeAll||this.toast.show('AIS data is disabled in your connection. To see radar targets, go to Settings -> Options -> Connectivity, enable "Subscribe to remote sources messages", then reconnect.',0,!1,"warn")}loadOwnShipIcon(){this.ngZone.runOutsideAngular(()=>{Nm().then(e=>{this.ownShipIconHref=e,this.scheduleRenderDebounced()})})}ngAfterViewInit(){this.initSvg(),this.scheduleRender()}onResized(e){this.hostSize.set({width:e.width,height:e.height})}initSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("class","ais-radar"),this.root=this.svg.append("g").attr("class","radar-root"),this.ringsLayer=this.root.append("g").attr("class","radar-rings"),this.vectorsLayer=this.root.append("g").attr("class","radar-vectors"),this.targetsLayer=this.root.append("g").attr("class","radar-targets"),this.selectedLayer=this.root.append("g").attr("class","radar-selected"),this.ownShipLayer=this.root.append("g").attr("class","radar-ownship-layer"),this.svg.on("click",()=>{this.selectedId.set(null),this.closeTargetMenu()})}scheduleRender(){this.renderFrame===null&&this.ngZone.runOutsideAngular(()=>{this.renderFrame=requestAnimationFrame(()=>{this.renderFrame=null,this.render()})})}scheduleRenderDebounced(){this.iconRenderTimer===null&&this.ngZone.runOutsideAngular(()=>{this.iconRenderTimer=window.setTimeout(()=>{this.iconRenderTimer=null,this.scheduleRender()},n.ICON_RENDER_DEBOUNCE_MS)})}render(){if(!this.renderState||!this.svg||!this.root)return;let{size:e,cfg:t,theme:i,targets:o,ownShip:r}=this.renderState,s=Math.max(1,e.width),l=Math.max(1,e.height),m=Math.min(s,l)/2,h=(Math.min(s,l)-35)/Math.min(s,l),v=Math.hypot(s,l)/2/h,y=t.ais??{},C=y.rangeRings?.length?y.rangeRings:[3,6,12,24,48],S=this.effectiveRangeIndex(),_=C[S]??C[0],F=this.resolveRingCountForRange(_),E=this.localViewMode()??y.viewMode??"course-up",N=this.toDegreesIfRadians(r.courseOverGroundTrue),U=this.toDegreesIfRadians(r.headingTrue),j=N!==null||U!==null,B=E==="course-up"?N??U??0:0,re=this.viewRotationSmoothed!==null&&Math.abs(this.shortestAngleDelta(this.viewRotationSmoothed,B))>.5,pe=this.buildFilterStateSignature(this.filterState()),te={sizeKey:`${s}x${l}`,viewMode:E,rangeIndex:S,rangesKey:C.join(","),showSelf:y.showSelf??!0,showCogVectors:y.showCogVectors??!0,showLostTargets:y.showLostTargets??!0,showUnconfirmedTargets:y.showUnconfirmedTargets??!0,filtersKey:pe,selectedId:this.selectedId(),targetsRef:o,ownShipRef:r,themeRef:i,color:t.color},se=this.lastRenderSignature;if(!re&&se&&se.sizeKey===te.sizeKey&&se.viewMode===te.viewMode&&se.rangeIndex===te.rangeIndex&&se.rangesKey===te.rangesKey&&se.showSelf===te.showSelf&&se.showCogVectors===te.showCogVectors&&se.showLostTargets===te.showLostTargets&&se.showUnconfirmedTargets===te.showUnconfirmedTargets&&se.filtersKey===te.filtersKey&&se.selectedId===te.selectedId&&se.targetsRef===te.targetsRef&&se.ownShipRef===te.ownShipRef&&se.themeRef===te.themeRef&&se.color===te.color)return;this.lastRenderSignature=te;let de=E==="course-up"&&j?this.smoothRotation(B):0,ce=E==="course-up"?Math.abs(this.shortestAngleDelta(de,B)):0;this.svg.attr("viewBox",`${-s/2} ${-l/2} ${s} ${l}`),this.root.attr("transform",`scale(${h})`);let ue=this.wrapDegrees((N??U??0)-de),me=Ce(t.color,i).dim;if(this.renderRings(F,_,m,v,de,h,y.showSelf??!0,ue,me),!r.position||!this.hasValidPosition(r.position))return;let Se=v/m*_,qe=this.buildTargets(o,r.position,_,Se,m,de,y);this.lastRenderTargets=qe,this.lastRenderScale=h,this.lastRenderSize=e,this.renderVectors(qe,_,m,de,y,r),this.renderTargets(qe,h),this.renderSelected(qe,h),this.raiseOwnshipAndVector(),ce>.5&&this.scheduleRender()}renderRings(e,t,i,o,r,s,l,m,h){if(!this.ringsLayer)return;let v=`${t.toFixed(3)}|${i.toFixed(3)}|${o.toFixed(3)}|${e}`;if(!this.ringCache||this.ringCache.key!==v){let B=t/Math.max(1,e),re=o/i*t,pe=[];for(let ce=B;ce<=re+1e-6;ce+=B)pe.push(ce);let te=pe.map(ce=>({value:ce,radius:ce/t*i})).filter(ce=>ce.radius<=o+1e-6),se=20,de=te.flatMap(ce=>[{key:`${ce.value}-top`,value:ce.value,x:0,y:-ce.radius+se},{key:`${ce.value}-bottom`,value:ce.value,x:0,y:ce.radius-se}]);this.ringCache={key:v,rings:te,labels:de}}let y=this.ringCache;if(!y)return;let C=y.rings,S=this.ringsLayer.selectAll("circle.ring").data(C,B=>B.value.toString());S.enter().append("circle").attr("class","ring").merge(S).attr("r",B=>B.radius).attr("stroke",h),S.exit().remove();let _=y.labels,F=this.ringsLayer.selectAll("text.ring-label").data(_,B=>B.key);F.enter().append("text").attr("class","ring-label").merge(F).attr("x",B=>B.x).attr("y",B=>B.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(B=>`${B.value}`),F.exit().remove();let E=this.ringsLayer.selectAll("circle.radar-center").data(l?[]:[{r:Math.max(3,i*.01)}]);E.enter().append("circle").attr("class","radar-center").merge(E).attr("cx",0).attr("cy",0).attr("r",B=>B.r).attr("fill",h),E.exit().remove();let N=this.ownShipLayer.selectAll("g.radar-ownship").data(l?[{size:this.resolveOwnShipBaseSize(s)}]:[]),U=N.enter().append("g").attr("class","radar-ownship");U.append("image").attr("class","ownship-icon").attr("href",this.ownShipIconHref??null).attr("xlink:href",this.ownShipIconHref??null);let j=U.merge(N);j.attr("transform",`rotate(${m})`),j.select("image.ownship-icon").attr("href",this.ownShipIconHref??null).attr("xlink:href",this.ownShipIconHref??null).attr("display",this.ownShipIconHref?null:"none").attr("width",B=>B.size).attr("height",B=>B.size).attr("x",B=>-B.size/2).attr("y",B=>-B.size/2),N.exit().remove()}toggleViewMode(){let e=this.localViewMode()??this.runtime.options()?.ais?.viewMode??"course-up";this.localViewMode.set(e==="course-up"?"north-up":"course-up")}incrementRange(){this.localRangeIndex.set(Math.max(this.effectiveRangeIndex()-1,0))}decrementRange(){let e=this.runtime.options()?.ais?.rangeRings??[3,6,12,24,48],t=Math.max(0,e.length-1);this.localRangeIndex.set(Math.min(this.effectiveRangeIndex()+1,t))}toggleFilter(e){this.filterState.update(t=>ge(Z({},t),{[e]:!t[e]}))}toggleVesselTypeFilter(e){this.filterState.update(t=>{let i=new Set(t.vesselTypes);return i.has(e)?i.delete(e):i.add(e),ge(Z({},t),{vesselTypes:i})})}isFilterEnabled(e){return this.filterState()[e]}isVesselTypeFilterEnabled(e){return this.filterState().vesselTypes.has(e)}formatVesselTypeLabel(e){let t=e.replace("vessel/","");switch(t){case"pleasurecraft":return"Pleasure Craft";case"highspeed":return"High Speed";case"sar":return"SAR";case"law":return"Law Enforcement";default:return`${t.charAt(0).toUpperCase()}${t.slice(1)}`}}syncFiltersFromConfig(e){let t=e.ais?.filters;if(!t)return;let i=this.buildFilterSignature(t);i!==this.lastFiltersSignature&&(this.lastFiltersSignature=i,this.filterState.set({anchoredMoored:t.anchoredMoored??!1,noCollisionRisk:t.noCollisionRisk??!1,allAton:t.allAton??!1,allButSar:t.allButSar??!1,allVessels:t.allVessels??!1,vesselTypes:new Set(t.vesselTypes??[])}))}buildFilterSignature(e){let t=[...e?.vesselTypes??[]].sort();return JSON.stringify({anchoredMoored:e?.anchoredMoored??!1,noCollisionRisk:e?.noCollisionRisk??!1,allAton:e?.allAton??!1,allButSar:e?.allButSar??!1,allVessels:e?.allVessels??!1,vesselTypes:t})}buildFilterStateSignature(e){let t=[...e.vesselTypes].sort();return JSON.stringify({anchoredMoored:e.anchoredMoored,noCollisionRisk:e.noCollisionRisk,allAton:e.allAton,allButSar:e.allButSar,allVessels:e.allVessels,vesselTypes:t})}resolveRingCountForRange(e){return[3].find(i=>this.isNiceStep(e/i))??4}isNiceStep(e){return[.5,1,2,2.5,3,4,5,6,8,10,12,15,20,25].some(i=>Math.abs(e-i)<1e-6)}resolveRangeIndex(e){return e?Number(e.rangeIndex):0}buildTargets(e,t,i,o,r,s,l){let m=l.showLostTargets??!0,h=l.showUnconfirmedTargets??!0,v=`${t.latitude?.toFixed(6)}|${t.longitude?.toFixed(6)}`;this.lastOriginKey!==v&&(this.targetCache.clear(),this.lastOriginKey=v);let y=new Set;for(let _ of e)y.add(_.id);for(let _ of this.targetCache.keys())y.has(_)||this.targetCache.delete(_);for(let _ of this.iconCache.keys())y.has(_)||this.iconCache.delete(_);let C=[];for(let _ of e)_.ais.status==="remove"&&(this.targetCache.delete(_.id),this.iconCache.delete(_.id),this.selectedId()===_.id&&this.selectedId.set(null));let S=e.filter(_=>_.ais.status==="remove"||_.ais.status==="lost"&&!m||_.ais.status==="unconfirmed"&&!h||!_.position||!this.hasValidPosition(_.position)?!1:!this.shouldFilterTarget(_));for(let _ of S){let F=this.buildTrackSignature(_),E=this.targetCache.get(_.id);if(!E||E.signature!==F){let se=this.distanceNm(t,_.position),de=this.ais.getBearingTrue(t,_.position)??0,ce=this.toDegreesIfRadians(this.isVesselLike(_)?_.headingTrue:null),ue=this.toDegreesIfRadians(this.isVesselLike(_)?_.courseOverGroundTrue:null);E={signature:F,distanceNm:se,bearing:de,trackHeading:ce,trackCog:ue},this.targetCache.set(_.id,E)}if(E.distanceNm>o)continue;let{href:N,scale:U}=this.resolveIconCached(_),j=this.wrapDegrees(E.bearing-s),{x:B,y:re}=this.polarToCartesian(j,E.distanceNm,i,r),pe=_.type==="aton"||_.type==="basestation"?0:this.wrapDegrees((E.trackHeading??E.trackCog??0)-s),te=this.buildClassName({id:_.id,status:_.ais.status,aisClass:_.ais.class,type:_.type,navState:this.isVesselLike(_)?_.navState:void 0});C.push({id:_.id,raw:_,x:B,y:re,heading:pe,status:_.ais.status,aisClass:_.ais.class,type:_.type,iconHref:N,iconScale:U,navState:this.isVesselLike(_)?_.navState:void 0,sog:this.isVesselLike(_)?_.speedOverGround:void 0,cog:E.trackCog??null,className:te})}return C}renderVectors(e,t,i,o,r,s){if(!this.vectorsLayer||!this.ownShipLayer)return;let l=r.showCogVectors??!0,m=Math.max(6,i*.04),h=(r.cogVectorsMinutes??5)*60,v=m*.8,y=[],C=[];for(let S of e)if(this.isVesselLike(S.raw)&&!this.isStationaryNavState(S.raw.navState)&&l&&typeof S.sog=="number"&&typeof S.cog=="number"){let _=this.wrapDegrees(S.cog-o),F=this.offsetPoint(S.x,S.y,_,v),E=S.sog*h/1852,N=Math.max(0,E/t*i-v);if(N<=0)continue;let U=this.offsetPoint(F.x,F.y,_,N),j=this.resolveTargetVectorStroke(S.raw);y.push({id:S.id,x1:F.x,y1:F.y,x2:U.x,y2:U.y,className:S.className,stroke:j})}if(r.showSelf??!0){let S=this.toDegreesIfRadians(s.courseOverGroundTrue),_=s.speedOverGround;if(S!==null&&typeof _=="number"){let F=this.wrapDegrees(S-o),E=this.offsetPoint(0,0,F,v),N=_*h/1852,U=Math.max(0,N/t*i-v);if(U<=0)return;let j=this.offsetPoint(E.x,E.y,F,U);C.push({id:"ownship",x1:E.x,y1:E.y,x2:j.x,y2:j.y,className:"ownship-vector",stroke:"var(--kip-orange-color)"})}}this.renderVectorLines(this.vectorsLayer,"motion-vector",y),this.renderVectorLines(this.ownShipLayer,"ownship-vector",C)}renderVectorLines(e,t,i){let o=e.selectAll(`line.${t}`).data(i,s=>s.id);o.enter().append("line").attr("class",s=>`${t} ${s.className}`).merge(o).attr("x1",s=>s.x1).attr("y1",s=>s.y1).attr("x2",s=>s.x2).attr("y2",s=>s.y2).style("stroke",s=>s.stroke??"#50505f").style("stroke-width",2).style("opacity",1).style("stroke-dasharray","15, 7"),o.exit().remove();let r=e.selectAll(`circle.${t}-tip`).data(i,s=>s.id);r.enter().append("circle").attr("class",s=>`${t}-tip ${s.className}`).merge(r).attr("cx",s=>s.x2).attr("cy",s=>s.y2).attr("r",2.5).style("fill",s=>s.stroke??"#50505f").style("stroke",s=>s.stroke??"#50505f").style("stroke-width",2).style("opacity",1).style("stroke-dasharray","15, 7"),r.exit().remove()}renderTargets(e,t){if(!this.targetsLayer)return;let i=this.resolveTargetBaseSize(t),o=this.targetsLayer.selectAll("g.target").data(e,l=>l.id),r=o.enter().append("g").on("click",(l,m)=>{l.stopPropagation(),this.handleTargetClick(l,m)});r.append("image").attr("class","target-icon"),r.append("title");let s=r.merge(o);s.attr("transform",l=>`translate(${l.x}, ${l.y}) rotate(${l.heading})`).attr("class",l=>`target ${l.className}`),s.select("image.target-icon").attr("href",l=>l.iconHref??null).attr("xlink:href",l=>l.iconHref??null).attr("display",l=>l.iconHref?null:"none").attr("width",l=>i*l.iconScale).attr("height",l=>i*l.iconScale).attr("x",l=>-(i*l.iconScale)/2).attr("y",l=>-(i*l.iconScale)/2),s.select("title").text(l=>`${l.raw.name??l.raw.mmsi??"AIS Target"}`),o.exit().remove()}renderSelected(e,t){if(!this.selectedLayer)return;let i=e.filter(h=>h.id===this.selectedId()),o=this.resolveTargetBaseSize(t),r=o*1.4,s=Math.min(r,Math.max(4,o*.6)),l=this.buildCornerBoxPath(r,s),m=this.selectedLayer.selectAll("path.selected-ring").data(i,h=>h.id);m.enter().append("path").attr("class","selected-ring").merge(m).attr("transform",h=>`translate(${h.x}, ${h.y})`).attr("d",l),m.exit().remove()}resolveTargetBaseSize(e){let t=Math.max(.2,e);return n.TARGET_ICON_SIZE_PX/t}resolveOwnShipBaseSize(e){let t=Math.max(.2,e);return n.OWN_SHIP_ICON_SIZE_PX/t}raiseOwnshipAndVector(){this.ownShipLayer?.raise()}onMenuItemSelect(e){this.openTargetDialog(e.target,e.iconHref),this.selectedId.set(null),this.closeTargetMenu()}handleTargetClick(e,t){let i=this.resolveMenuItems(e,t);if(i.length<=1){this.openTargetDialog(t.raw,t.iconHref);return}this.menuItems.set(i),this.menuPoint=this.resolveMenuPoint(e),this.positionMenuAnchor(),this.menuTrigger().openMenu()}openTargetDialog(e,t){this.selectedId.set(e.id),this.dialog.openAisDetailDialog({title:this.buildTargetTitle(e),iconHref:t??void 0,component:"ais-target",componentType:pl,payload:{target:e}}).subscribe()}resolveMenuItems(e,t){return this.findTargetsNearEvent(e,t).map(o=>({id:o.id,label:this.buildTargetMenuLabel(o.raw),iconHref:o.iconHref,target:o.raw}))}findTargetsNearEvent(e,t){let i=this.lastRenderTargets.length?this.lastRenderTargets:[t],o=this.eventToRadarPoint(e);if(!o)return[t];let r=this.hitRadiusPx/this.lastRenderScale,s=i.map((l,m)=>{let h=l.x-o.x,v=l.y-o.y,y=Math.hypot(h,v);return{candidate:l,distance:y,index:m}}).filter(l=>l.distance<=r).sort((l,m)=>l.distance-m.distance||l.index-m.index).map(l=>l.candidate);return s.length?s:[t]}eventToRadarPoint(e){if(!this.lastRenderSize)return null;let o=this.svgRef().nativeElement.getBoundingClientRect(),r=e.clientX-o.left,s=e.clientY-o.top,l=(r-o.width/2)/this.lastRenderScale,m=(s-o.height/2)/this.lastRenderScale;return{x:l,y:m}}resolveMenuPoint(e){let t=this.svgRef().nativeElement.closest(".ais-radar-container");if(!t)return null;let i=t.getBoundingClientRect();return{x:e.clientX-i.left,y:e.clientY-i.top}}positionMenuAnchor(){let e=this.menuAnchorRef().nativeElement;this.menuPoint&&(e.style.left=`${this.menuPoint.x}px`,e.style.top=`${this.menuPoint.y}px`)}closeTargetMenu(){this.resetTargetMenuState(),this.menuTrigger().menuOpen&&this.menuTrigger().closeMenu()}resetTargetMenuState(){this.menuItems.set([]),this.menuPoint=null}buildTargetMenuLabel(e){return this.isAton(e)&&e.typeName?e.typeName:e.name??e.mmsi??"AIS Target"}buildTargetTitle(e){let t=this.isAton(e)&&e.typeName?e.typeName:e.name??e.type??"AIS Target",i=e.ais.status;return i==="unconfirmed"||i==="lost"||i==="remove"?`${t} - ${i}`:t}resolveIconCached(e){let t=this.buildIconSignature(e),i=this.iconCache.get(e.id);if(i&&i.signature===t)return i.icon;let o=this.resolveIconScale(e.type),r={href:i?.icon.href??null,scale:o};this.iconCache.set(e.id,{signature:t,icon:r});let s=e.ais.status==="remove"?void 0:e.ais.status;return this.ngZone.runOutsideAngular(()=>{Rm({mmsi:e.mmsi??"",type:e.type,navState:this.isVesselLike(e)?e.navState:void 0,aisShipTypeId:this.isVesselLike(e)?e.design?.aisShipType?.id:void 0,atonVirtual:this.isAton(e)?e.virtual:void 0,atonTypeId:this.isAton(e)?e.typeId:void 0,status:s,collisionRiskRating:this.isVesselLike(e)?e.closestApproach?.collisionRiskRating:void 0}).then(l=>{let m=this.iconCache.get(e.id);!m||m.signature!==t||(m.icon={href:l,scale:o},this.scheduleRenderDebounced())})}),r}resolveIconScale(e){switch(e){case"aton":return 3.5;case"basestation":return 3;case"sar":return 2.4;case"vessel":return 3;default:return 2.4}}buildIconSignature(e){let t=e.ais.status==="lost"?"unconfirmed":e.ais.status;return[e.mmsi,e.type,this.isVesselLike(e)?e.navState:void 0,this.isVesselLike(e)?e.design?.aisShipType?.id:void 0,this.isAton(e)?e.virtual:void 0,this.isAton(e)?e.typeId:void 0,t,this.isVesselLike(e)?e.closestApproach?.collisionRiskRating:void 0].join("|")}buildClassName(e){let t=[`status-${e.status}`,`type-${e.type}`,e.aisClass?`class-${e.aisClass.toLowerCase()}`:"class-unknown"];if(e.navState){let i=e.navState.toLowerCase();i.includes("moored")&&t.push("state-moored"),i.includes("anchored")&&t.push("state-anchored")}return e.id===this.selectedId()&&t.push("is-selected"),t.join(" ")}resolveTargetVectorStroke(e){if(e.ais.status!=="confirmed")return"#50505f";let t=e.closestApproach?.collisionRiskRating,i=typeof t=="number"?t:Number(t);return Number.isFinite(i)?i<td?"red":i<Ds?"yellow":"#50505f":"#50505f"}shouldFilterTarget(e){let t=this.filterState();if(!t.anchoredMoored&&!t.noCollisionRisk&&!t.allAton&&!t.allButSar&&!t.allVessels&&t.vesselTypes.size===0)return!1;if(t.anchoredMoored&&this.isVesselLike(e)&&this.isStationaryNavState(e.navState)||t.noCollisionRisk&&this.isVesselLike(e)&&(e.ais.status!=="confirmed"||this.isStationaryNavState(e.navState)||this.isNoCollisionRisk(e))||t.allAton&&e.type==="aton"||t.allButSar&&e.type!=="sar"||t.allVessels&&this.isVesselLike(e))return!0;if(t.vesselTypes.size>0&&this.isVesselLike(e)){let i=this.resolveVesselIconKey(e);if(i&&t.vesselTypes.has(i))return!0}return!1}isNoCollisionRisk(e){let t=e.closestApproach?.collisionRiskRating;if(!Object.prototype.hasOwnProperty.call(e.closestApproach??{},"collisionRiskRating"))return!1;if(t==null)return!0;let i=typeof t=="number"?t:Number(t);return Number.isFinite(i)?i>=Ds:!0}resolveVesselIconKey(e){if(!this.isVesselLike(e))return null;let t=od({mmsi:e.mmsi??e.id??"",type:e.type,aisShipTypeId:e.design?.aisShipType?.id});return t.startsWith("vessel/")?t:null}polarToCartesian(e,t,i,o){let r=e*Math.PI/180,s=t/i*o;return{x:s*Math.sin(r),y:-s*Math.cos(r)}}hasValidPosition(e){return typeof e?.latitude=="number"&&Number.isFinite(e.latitude)&&typeof e?.longitude=="number"&&Number.isFinite(e.longitude)}offsetPoint(e,t,i,o){let r=i*Math.PI/180;return{x:e+o*Math.sin(r),y:t-o*Math.cos(r)}}wrapDegrees(e){let t=e%360;return t<0?t+360:t}isStationaryNavState(e){if(typeof e=="number"&&Number.isFinite(e))return e===1||e===5;if(typeof e!="string")return!1;let t=e.trim().toLowerCase().replace(/\s+/g," ");if(!t.length)return!1;let i=Number(t);return Number.isFinite(i)?i===1||i===5:t.includes("moored")||t.includes("anchored")||t.includes("at anchor")}shortestAngleDelta(e,t){return(t-e+540)%360-180}buildTrackSignature(e){let t=e.position??{};return[t.latitude,t.longitude,this.isVesselLike(e)?e.headingTrue:void 0,this.isVesselLike(e)?e.courseOverGroundTrue:void 0].join("|")}isVesselLike(e){return e.type==="vessel"||e.type==="sar"}isAton(e){return e.type==="aton"}buildCornerBoxPath(e,t){let i=e,o=Math.min(Math.max(t,0),i);return[`M ${-i} ${-i} h ${o}`,`M ${-i} ${-i} v ${o}`,`M ${i} ${-i} h ${-o}`,`M ${i} ${-i} v ${o}`,`M ${-i} ${i} h ${o}`,`M ${-i} ${i} v ${-o}`,`M ${i} ${i} h ${-o}`,`M ${i} ${i} v ${-o}`].join(" ")}smoothRotation(e){let t=performance.now();if(this.viewRotationSmoothed===null||this.lastRotationAt===null)return this.viewRotationSmoothed=this.wrapDegrees(e),this.lastRotationAt=t,this.viewRotationSmoothed;let i=Math.min(250,Math.max(0,t-this.lastRotationAt)),o=Math.min(1,i/200),r=this.shortestAngleDelta(this.viewRotationSmoothed,e);return this.viewRotationSmoothed=this.wrapDegrees(this.viewRotationSmoothed+r*o),this.lastRotationAt=t,this.viewRotationSmoothed}toDegreesIfRadians(e){return typeof e!="number"||!Number.isFinite(e)?null:this.units.convertToUnit("deg",e)}distanceNm(e,t){let o=e.latitude*Math.PI/180,r=t.latitude*Math.PI/180,s=(t.latitude-e.latitude)*Math.PI/180,l=(t.longitude-e.longitude)*Math.PI/180,m=Math.sin(s/2),h=Math.sin(l/2),v=m*m+Math.cos(o)*Math.cos(r)*h*h;return 6371e3*(2*Math.atan2(Math.sqrt(v),Math.sqrt(1-v)))/1852}ngOnDestroy(){this.renderFrame&&(cancelAnimationFrame(this.renderFrame),this.renderFrame=null),this.iconRenderTimer!==null&&(window.clearTimeout(this.iconRenderTimer),this.iconRenderTimer=null)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-ais-radar"]],viewQuery:function(t,i){t&1&&_e(i.svgRef,Qx,5)(i.menuAnchorRef,Jx,5)(i.menuTrigger,eS,5),t&2&&Me(3)},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:29,vars:9,consts:[["radarSvg",""],["menuAnchor","","menuTrigger","matMenuTrigger"],["targetMenu","matMenu"],["filterMenu","matMenu"],["vesselTypeMenu","matMenu"],["kipResizeObserver","",1,"ais-radar-container",3,"kipResize"],["type","button","matMiniFab","",1,"ais-radar-mode-toggle-button",3,"click","matTooltip"],["viewBox","0 0 40 40","aria-hidden","true",1,"ais-mode-icon"],["type","button","matMiniFab","","matTooltip","Increase range","aria-label","Increase range",1,"ais-radar-range-button","ais-radar-range-plus",3,"click"],["type","button","matMiniFab","","matTooltip","Decrease range","aria-label","Decrease range",1,"ais-radar-range-button","ais-radar-range-minus",3,"click"],["type","button","matMiniFab","","matTooltip","Filter targets","aria-label","Filter targets",1,"ais-radar-range-button","ais-radar-filter-button",3,"matMenuTriggerFor"],["type","button","matMiniFab","","matTooltip","Show only collision risk targets","aria-label","No collision risk filter",1,"ais-radar-range-button","ais-radar-collision-button",3,"is-active"],["role","img","aria-label","AIS radar display",1,"ais-radar"],["type","button","aria-hidden","true","tabindex","-1",1,"ais-radar-menu-anchor",3,"matMenuTriggerFor"],[3,"closed"],["matMenuContent",""],[1,"widgetOverlay"],["stroke","currentColor","d","M10 8 L20 2 L30 8",1,"ais-mode-icon-chev"],["fill","currentColor","x","20","y","31",1,"ais-mode-icon-letter"],["fill","currentColor","d","M20 4 L34 36 L20 28 L6 36 Z",1,"ais-mode-icon-vessel"],["type","button","matMiniFab","","matTooltip","Show only collision risk targets","aria-label","No collision risk filter",1,"ais-radar-range-button","ais-radar-collision-button",3,"click"],["mat-menu-item","","type","button",1,"ais-radar-menu-item"],["mat-menu-item","","type","button",1,"ais-radar-menu-item",3,"click"],["alt","","aria-hidden","true",1,"target-menu-icon"],[1,"target-menu-label"],["mat-menu-item","","disabled","",1,"ais-filter-menu-header"],["mat-menu-item","","type","button",3,"click"],["aria-hidden","true",1,"ais-filter-check"],["mat-menu-item","",3,"matMenuTriggerFor"],["mat-menu-item","","type","button"]],template:function(t,i){if(t&1&&(d(0,"div",5),$("kipResize",function(r){return i.onResized(r)}),d(1,"button",6),$("click",function(){return i.toggleViewMode()}),I(2,iS,4,0,":svg:svg",7)(3,nS,2,0,":svg:svg",7),u(),d(4,"button",8),$("click",function(){return i.incrementRange()}),d(5,"mat-icon"),c(6,"add"),u()(),d(7,"button",9),$("click",function(){return i.decrementRange()}),d(8,"mat-icon"),c(9,"remove"),u()(),d(10,"button",10)(11,"mat-icon"),c(12,"filter_list"),u()(),I(13,aS,3,2,"button",11),oe(),O(14,"svg",12,0),Ue(),O(16,"button",13,1),u(),d(19,"mat-menu",14,2),$("closed",function(){return i.resetTargetMenuState()}),Ai(21,rS,2,0,"ng-template",15),u(),d(22,"mat-menu",null,3),Ai(24,sS,27,5,"ng-template",15),u(),d(25,"mat-menu",null,4),Ai(27,dS,2,0,"ng-template",15),u(),I(28,cS,1,0,"div",16)),t&2){let o=Lt(20),r=Lt(23);f(),R("matTooltip",i.effectiveViewMode()==="north-up"?"Change to North-Up mode":"Change to Course-Up mode"),ie("aria-label",i.effectiveViewMode()==="north-up"?"North up mode":"Course up mode"),f(),P(i.effectiveViewMode()==="north-up"?2:3),f(8),dt("is-active",i.hasActiveFilters()),R("matMenuTriggerFor",r),f(3),P(i.hasCollisionRiskData()?13:-1),f(3),R("matMenuTriggerFor",o),f(12),P(i.dashboard.isDashboardStatic()?-1:28)}},dependencies:[oi,et,ds,Xe,je,im,em,Qu,Ju,tm,Co,Ao],encapsulation:2,changeDetection:0})}return n})();var uS=["canvasMainRef"],dg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);canvas=A(St);static DEFAULT_CONFIG={displayName:"Static Label",color:"green",bgColor:"grey",noColor:!1,noBgColor:!0};canvasRef=he.required("canvasMainRef");canvasElement=null;ctx=null;cssWidth=0;cssHeight=0;maxTextWidth=0;maxTextHeight=0;disposed=!1;fgColor=w("");bgColor=w("");constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{this.fgColor.set(this.mapColor(e.color,t)),this.bgColor.set(this.mapColor(e.bgColor??"grey",t)),this.draw()})}),W(()=>{let e=this.runtime.options()?.displayName;z(()=>{e!==void 0&&this.draw()})})}mapColor(e,t){switch(e){case"contrast":return t.contrast;case"blue":return t.blue;case"green":return t.green;case"pink":return t.pink;case"orange":return t.orange;case"purple":return t.purple;case"grey":return t.grey;case"yellow":return t.yellow;default:return t.contrast}}ngAfterViewInit(){this.canvasElement=this.canvasRef().nativeElement,this.ctx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.draw()}}),this.cssHeight=Math.round(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.round(this.canvasElement.getBoundingClientRect().width),this.draw()}draw(){if(!this.ctx||!this.canvasElement)return;let e=this.runtime.options();if(!e)return;this.canvas.clearCanvas(this.ctx,this.cssWidth,this.cssHeight),e.noBgColor||this.canvas.drawRectangle(this.ctx,0,0,this.canvasElement.width,this.canvasElement.height,this.bgColor());let t=e.displayName||"";this.canvas.drawText(this.ctx,t,Math.floor(this.cssWidth/2),Math.floor(this.cssHeight/2+10),this.cssWidth-40,this.cssHeight-40,"bold",this.fgColor())}ngOnDestroy(){this.disposed=!0;try{this.canvasElement&&this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-label"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,uS,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:0,consts:[["canvasMainRef",""],[1,"label-canvas"]],template:function(t,i){t&1&&ee(0,"canvas",1,0)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;overflow:hidden}.label-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;display:block;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}"],changeDetection:0})}return n})();var mS=["plainIframe"];function hS(n,a){if(n&1&&ee(0,"iframe",1,0),n&2){let e=T();ji("src",e.widgetUrl(),Sa)}}function pS(n,a){n&1&&(D(0,"div",2)(1,"h2"),c(2,"Empty or bad URL"),G(),D(3,"p"),c(4," IMPORTANT: cross-domain security rules (CORS) apply to this widget. "),G(),D(5,"p"),c(6,"Typically, you can load Grafana graphs, Signal K apps or other related tools. "),G()())}var cg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);_dashboard=A(Tt);_sanitizer=A(oo);static DEFAULT_CONFIG={widgetUrl:null,allowInput:!1};iframe=he.required("plainIframe");widgetUrl=w(null);displayTransparentOverlay=w("block");constructor(){W(()=>{let e=this.runtime.options(),t=this._dashboard.isDashboardStatic();e&&z(()=>{t?this.displayTransparentOverlay.set(e.allowInput?"none":"block"):this.displayTransparentOverlay.set("block")})}),W(()=>{let e=this.runtime.options()?.widgetUrl;this.widgetUrl.set(this.resolveUrl(e))}),window.addEventListener("message",this.handleIframeGesture)}ngAfterViewInit(){if(this.iframe()){this.iframe().nativeElement.onload=()=>this.injectSwipeScript();try{let e=this.iframe().nativeElement.contentDocument;e&&(e.readyState==="complete"||e.readyState==="interactive")&&this.injectSwipeScript()}catch(e){}}}ngOnDestroy(){window.removeEventListener("message",this.handleIframeGesture),this.iframe()&&(this.iframe().nativeElement.onload=null);try{let e=this.iframe()?.nativeElement.contentDocument;if(e){let t=`kip-gesture-inject-${this.id()}`,i=e.getElementById(t);i&&i.parentNode&&i.parentNode.removeChild(i)}}catch(e){}}handleIframeGesture=e=>{if(!e.data)return;let t=e.data?.eventData?.instanceId||e.data?.keyEventData?.instanceId;if(!(!t||t!==this.id())){if(e.data.gesture)switch(e.data.gesture){case"swipeup":this._dashboard.navigateToPreviousDashboard();break;case"swipedown":this._dashboard.navigateToNextDashboard();break;case"swipeleft":{let i=new Event("openLeftSidenav",{bubbles:!0,cancelable:!0});window.document.dispatchEvent(i);break}case"swiperight":{let i=new Event("openRightSidenav",{bubbles:!0,cancelable:!0});window.document.dispatchEvent(i);break}default:break}if(e.data.type==="keydown"&&e.data.keyEventData){let{key:i,ctrlKey:o,shiftKey:r}=e.data.keyEventData,s=new KeyboardEvent("keydown",{key:i,ctrlKey:o,shiftKey:r,bubbles:!0,cancelable:!0});document.dispatchEvent(s)}}};injectSwipeScript(){let e=this.iframe().nativeElement.contentWindow,t=this.iframe().nativeElement.contentDocument;if(!t||!e){console.error("[WidgetIframe] Iframe contentDocument or contentWindow is undefined. Possible cross-origin issue or iframe not fully loaded.");return}try{let i=`kip-gesture-inject-${this.id()}`;if(t.getElementById(i))return;let o=xo({instanceId:this.id()}),r=t.createElement("script");r.id=i,r.textContent=o,t.body.appendChild(r)}catch(i){console.warn("[WidgetIframe] Failed to inject swipe script into iframe:",i)}}isValidProtocol(e){try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch(t){return console.warn(`[Embed Widget] Invalid Url: ${e}, Error: ${t}`),!1}}resolveUrl(e){if(!e)return null;try{let t=new URL(e,window.location.origin);return this.isValidProtocol(t.href)?this._sanitizer.bypassSecurityTrustResourceUrl(t.href):null}catch(t){return console.warn(`[Embed Widget] Can't resolve Url: ${e}, Error: ${t}`),null}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-iframe"]],viewQuery:function(t,i){t&1&&_e(i.iframe,mS,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:3,vars:3,consts:[["plainIframe",""],["width","100%","height","100%","frameborder","0",1,"widgetIframe",3,"src"],[2,"padding","15px"],[1,"widgetOverlay"]],template:function(t,i){t&1&&(I(0,hS,2,1,"iframe",1)(1,pS,7,0,"div",2),ee(2,"div",3)),t&2&&(P(i.widgetUrl()?0:1),f(2),Te("display",i.displayTransparentOverlay()))},styles:["[_nghost-%COMP%]{overflow:hidden}.widgetIframe[_ngcontent-%COMP%]{background-color:#fff;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent}"],changeDetection:0})}return n})();var gS=["hWrapper"];function fS(n){return{Red:n.ColorDef.RED,Green:n.ColorDef.GREEN,Blue:n.ColorDef.BLUE,Orange:n.ColorDef.ORANGE,Yellow:n.ColorDef.YELLOW,Cyan:n.ColorDef.CYAN,Magenta:n.ColorDef.MAGENTA,White:n.ColorDef.WHITE,Gray:n.ColorDef.GRAY,Black:n.ColorDef.BLACK,Raith:n.ColorDef.RAITH,"Green LCD":n.ColorDef.GREEN_LCD,"JUG Green":n.ColorDef.JUG_GREEN}}function vS(n){return{blackMetal:n.FrameDesign.BLACK_METAL,metal:n.FrameDesign.METAL,shinyMetal:n.FrameDesign.SHINY_METAL,brass:n.FrameDesign.BRASS,steel:n.FrameDesign.STEEL,chrome:n.FrameDesign.CHROME,gold:n.FrameDesign.GOLD,anthracite:n.FrameDesign.ANTHRACITE,tiltedGray:n.FrameDesign.TILTED_GRAY,tiltedBlack:n.FrameDesign.TILTED_BLACK,glossyMetal:n.FrameDesign.GLOSSY_METAL}}var ug=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Horizon",filterSelfPaths:!0,paths:{gaugePitchPath:{description:"Attitude Pitch Data",path:"self.navigation.attitude.pitch",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:1e3},gaugeRollPath:{description:"Attitude Roll Data",path:"self.navigation.attitude.roll",source:"default",pathType:"number",pathRequired:!1,isPathConfigurable:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:1e3}},gauge:{type:"horizon",noFrameVisible:!1,faceColor:"anthracite",invertPitch:!1,invertRoll:!1},enableTimeout:!1,dataTimeout:5};wrapperRef=he("hWrapper");resizeObserver=null;currentSize=0;structuralKey="";pendingSize=null;sizeCommitTimer=null;SIZE_STABLE_MS=180;ngZone=A(Je);gaugeOptions={};frameVisibleView=L(()=>!(this.runtime.options()?.gauge?.noFrameVisible??!1));gauge=null;latestPitch=0;latestRoll=0;constructor(){W(()=>{let e=this.runtime.options();!e||!e.paths?.gaugePitchPath?.path||z(()=>this.streams.observe("gaugePitchPath",i=>{let o=i?.data?.value??0;if(this.latestPitch=o,this.gauge){let r=e.gauge?.invertPitch?-o:o;try{this.gauge.setPitchAnimated(r)}catch(s){}}}))}),W(()=>{let e=this.runtime.options();!e||!e.paths?.gaugeRollPath?.path||z(()=>this.streams.observe("gaugeRollPath",i=>{let o=i?.data?.value??0;if(this.latestRoll=o,this.gauge){let r=e.gauge?.invertRoll?-o:o;try{this.gauge.setRollAnimated(r)}catch(s){}}}))}),W(()=>{let e=this.runtime.options();if(!e)return;let t=`${e.gauge?.noFrameVisible??!1}|${e.gauge?.faceColor??"anthracite"}`;if(t===this.structuralKey){this.applyInversions(e);return}this.structuralKey=t,this.currentSize>=50&&(this.buildOptions(e,this.currentSize),this.rebuildGauge())})}ngAfterViewInit(){let e=this.wrapperRef()?.nativeElement;if(!e)return;let t=()=>{if(this.pendingSize==null||this.pendingSize===this.currentSize||this.pendingSize<50)return;let r=this.pendingSize,s=this.runtime.options();if(!s)return;this.currentSize=r;let l=document.getElementById(this.id()+"-canvas");l&&((l.width!==r||l.height!==r)&&(l.width=r,l.height=r),l.style.width=r+"px",l.style.height=r+"px"),this.buildOptions(s,r),this.rebuildGauge(),this.pendingSize=null},i=()=>{this.sizeCommitTimer&&clearTimeout(this.sizeCommitTimer),this.sizeCommitTimer=window.setTimeout(()=>{t(),this.sizeCommitTimer=null},this.SIZE_STABLE_MS)},o=()=>{let r=e.getBoundingClientRect(),s=Math.round(Math.min(r.width,r.height)),l=this.pendingSize??this.currentSize;if(!s||s<50||l&&Math.abs(l-s)<4)return;if(this.currentSize===0&&this.pendingSize===null){this.pendingSize=s,t();return}this.pendingSize=s;let m=document.getElementById(this.id()+"-canvas");m&&(m.style.width=s+"px",m.style.height=s+"px"),i()};this.ngZone.runOutsideAngular(()=>{this.resizeObserver=new ResizeObserver(()=>o()),this.resizeObserver.observe(e),o()})}buildOptions(e,t){if(typeof steelseries>"u")return;let i=vS(steelseries),o=fS(steelseries);this.gaugeOptions={pointerColor:o.Red,frameVisible:!(e.gauge?.noFrameVisible??!1),frameDesign:i[e.gauge?.faceColor??"anthracite"],foregroundVisible:!1,size:t}}rebuildGauge(){let e=this.id()+"-canvas";if(this.gauge)try{this.gauge=null}catch(i){}let t=document.getElementById(e);if(t){this.currentSize&&(t.width!==this.currentSize||t.height!==this.currentSize)&&(t.width=this.currentSize,t.height=this.currentSize);let i=t.getContext("2d");i&&i.clearRect(0,0,t.width,t.height)}try{this.gauge=new steelseries.Horizon(e,this.gaugeOptions);let i=this.runtime.options();i&&this.gauge&&this.applyInversions(i)}catch(i){}}applyInversions(e){if(this.gauge){try{this.gauge.setPitchAnimated(e.gauge?.invertPitch?-this.latestPitch:this.latestPitch)}catch(t){}try{this.gauge.setRollAnimated(e.gauge?.invertRoll?-this.latestRoll:this.latestRoll)}catch(t){}}}ngOnDestroy(){if(this.resizeObserver){try{this.resizeObserver.disconnect()}catch(t){}this.resizeObserver=null}this.sizeCommitTimer&&(clearTimeout(this.sizeCommitTimer),this.sizeCommitTimer=null);let e=document.getElementById(this.id()+"-canvas");if(e)try{let t=e.getContext("2d");t&&t.clearRect(0,0,e.width,e.height),e.width=0,e.height=0}catch(t){}this.gauge=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-horizon"]],viewQuery:function(t,i){t&1&&_e(i.wrapperRef,gS,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:4,vars:3,consts:[["hWrapper",""],[1,"canvas-wrap"],[2,"z-index","inherit",3,"id"]],template:function(t,i){t&1&&(D(0,"div",1,0)(2,"canvas",2),c(3," Browser does not support canvas element. "),G()()),t&2&&(Te("padding",i.frameVisibleView()?"10px":"0px"),f(2),ji("id",i.id()+"-canvas"))},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}.canvas-wrap[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0}.canvas-wrap[_ngcontent-%COMP%] > canvas[_ngcontent-%COMP%]{display:block;position:static;transform:none}"],changeDetection:0})}return n})();var bS=["finePath"],yS=["coarsePath"];function AS(n,a){if(n&1&&(oe(),ee(0,"line")),n&2){let e=a.$implicit;ie("x1",e.x1)("y1",e.y1)("x2",e.x2)("y2",e.y2)("stroke-width",e.major?1.5:1)}}function CS(n,a){if(n&1&&(oe(),ee(0,"line",20)),n&2){let e=a.$implicit;ie("x1",e.x1)("y1",e.y1)("x2",e.x2)("y2",e.y2)("stroke-width",e.major?1.2:.8)}}function xS(n,a){if(n&1&&(oe(),D(0,"text"),c(1),G()),n&2){let e=a.$implicit;ie("x",e.x)("y",e.y),f(),be("",e.text,"\xB0")}}function SS(n,a){if(n&1&&(oe(),ee(0,"line")),n&2){let e=a.$implicit;ie("x1",e.x1)("y1",e.y1)("x2",e.x2)("y2",e.y2)("stroke-width",e.major?1.5:1)}}function wS(n,a){if(n&1&&(oe(),ee(0,"line",20)),n&2){let e=a.$implicit;ie("x1",e.x1)("y1",e.y1)("x2",e.x2)("y2",e.y2)("stroke-width",e.major?1.2:.8)}}function _S(n,a){if(n&1&&(oe(),D(0,"text"),c(1),G()),n&2){let e=a.$implicit;ie("x",e.x)("y",e.y),f(),be("",e.text,"\xB0")}}var mg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);ngZone=A(Je);finePathRef=he("finePath");coarsePathRef=he("coarsePath");angleDeg=w(0);absAngle=L(()=>{let e=this.angleDeg();return e==null?null:Math.abs(e)});angleSide=L(()=>{let e=this.angleDeg();if(e==null)return"";let t=e>0?"Stbd":e<0?"Port":"Level";return this.runtime.options()?.gauge?.sideLabel?t:""});displayValue=L(()=>{let e=this.absAngle();if(e==null)return"--";let t=this.runtime.options()?.numDecimal??1;return e.toFixed(t)});themeColorValue=w("contrast");ready=w(!1);pointerTransition=L(()=>{let e=this.runtime.options()?.paths?.angle?.sampleTime??1e3;return`transform ${Math.max(100,e*.95)}ms ease-in-out`});fineTicks=w([]);fineInnerTicks=w([]);fineLabels=w([]);coarseTicks=w([]);coarseInnerTicks=w([]);coarseLabels=w([]);finePointerTransform=this.makePointerTransform("fine");coarsePointerTransform=this.makePointerTransform("coarse");displayName=L(()=>this.runtime.options()?.displayName||"Heel");static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Heel",filterSelfPaths:!0,paths:{angle:{description:"Heel / Roll / Other Angle",path:"self.navigation.attitude.roll",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"deg",sampleTime:1e3,pathRequired:!0}},gauge:{type:"angle",invertAngle:!1,sideLabel:!0},numInt:2,numDecimal:0,color:"contrast",enableTimeout:!1,dataTimeout:5};constructor(){W(()=>{let e=this.runtime.options();!e||!e.paths?.angle?.path||z(()=>this.streams.observe("angle",i=>{let o=i?.data?.value;if(o==null){this.angleDeg.set(null);return}let r=e.gauge?.invertAngle?-o:o;this.angleDeg.set(r)}))}),W(()=>{let e=this.theme(),t=this.runtime.options();!e||!t||this.themeColorValue.set(Ce(t.color||"contrast",e).color)})}ngAfterViewInit(){this.ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{let e=this.finePathRef()?.nativeElement,t=this.coarsePathRef()?.nativeElement;if(e){let i=this.buildScale(e,-5,5,1,.5);this.fineTicks.set(i.ticks),this.fineInnerTicks.set(i.innerTicks),this.fineLabels.set(i.labels)}if(t){let i=this.buildScale(t,-40,40,10,5);this.coarseTicks.set(i.ticks),this.coarseInnerTicks.set(i.innerTicks),this.coarseLabels.set(i.labels)}this.angleDeg()==null&&this.angleDeg.set(0),this.ready.set(!0)})})}makePointerTransform(e){return L(()=>this.computePointerTransform(this.angleDeg(),e))}setColors(e){let t=this.runtime.options();!e||!t||this.themeColorValue.set(Ce(t.color||"contrast",e).color)}computePointerTransform(e,t){let i=e??0,o=t==="fine"?this.finePathRef()?.nativeElement:this.coarsePathRef()?.nativeElement;if(!o)return t==="fine"?"translate(200px, 20px) rotate(0deg)":"translate(200px, 10px) rotate(0deg)";let r=t==="fine"?{min:-5,max:5}:{min:-40,max:40},s=Math.max(r.min,Math.min(r.max,i)),l=o.getTotalLength(),h=(s-r.min)/(r.max-r.min)*l,v=o.getPointAtLength(h),y=h<10||h>l-10?5:1,C=o.getPointAtLength(Math.max(0,h-y)),S=o.getPointAtLength(Math.min(l,h+y)),_=S.x-C.x,F=S.y-C.y,E=Math.atan2(F,_)*180/Math.PI,N=Math.hypot(_,F)||1,U=-F/N,j=_/N,B=-10,re=v.x+U*B,pe=v.y+j*B;return`translate(${re}px, ${pe}px) rotate(${E}deg)`}buildScale(e,t,i,o,r){let s=e.getTotalLength(),l=[],m=[],h=[],v=i-t,y=Math.round(v/r),C=Math.round(o/r);for(let S=0;S<=y;S++){let _=t+S*r,F=S/y,E=S===y?s:F*s,N=e.getPointAtLength(E),U=e.getPointAtLength(Math.max(0,E-1)),j=e.getPointAtLength(Math.min(s,E+1)),B=Math.atan2(j.y-U.y,j.x-U.x)*180/Math.PI,re=S%C===0||Math.abs(_)<1e-9,pe=re?8:4,te=re?6:3,se=this.pointFromAngle(N,B+90,0),de=this.pointFromAngle(N,B+90,pe);l.push({x1:se.x,y1:se.y,x2:de.x,y2:de.y,major:re});let ce=this.pointFromAngle(N,B-90,0),ue=this.pointFromAngle(N,B-90,te);if(m.push({x1:ce.x,y1:ce.y,x2:ue.x,y2:ue.y,major:re}),re){let me=this.pointFromAngle(N,B+90,pe+8);h.push({x:me.x,y:me.y,text:`${Math.abs(_)}`,value:_})}}return{ticks:l,innerTicks:m,labels:h}}pointFromAngle(e,t,i){let o=t*Math.PI/180;return{x:e.x+Math.cos(o)*i,y:e.y+Math.sin(o)*i}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-heel-gauge"]],viewQuery:function(t,i){t&1&&_e(i.finePathRef,bS,5)(i.coarsePathRef,yS,5),t&2&&Me(2)},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:54,vars:18,consts:[["finePath",""],["coarsePath",""],[1,"container"],["viewBox","0 0 400 105","preserveAspectRatio","xMidYMid meet",1,"flex-element","scale","fine"],["id","fineTubeGradient","x1","0%","y1","0%","x2","0%","y2","100%"],["offset","0%",1,"tube-highlight-color","opacity1"],["offset","45%",1,"tube-highlight-color","opacity2"],["offset","100%",1,"tube-highlight-color","opacity3"],["id","tubeEffect"],["in","SourceAlpha","stdDeviation","1.5","result","blur"],["in","blur","surfaceScale","4","specularConstant",".6","specularExponent","30","lighting-color","currentColor","result","specular"],["x","200","y","-50","z","150"],["x","200","y","150","z","80"],["in","specular","in2","SourceAlpha","operator","in","result","specular"],["in","SourceGraphic","in2","specular","operator","arithmetic","k1","0","k2","1","k3","0.7","k4","0"],["d","M 60,10 A 2400,2400 0 0,0 340,10 A 10,10 0 0,1 340,30 A 2400,2400 0 0,1 60,30 A 10,10 0 0,1 60,10 Z",1,"tube-background"],["d","M 60,11 A 2400,2400 0 0,0 340,11 A 8,8 0 0,1 340,17 A 2400,2400 0 0,1 60,17 A 8,8 0 0,1 60,11 Z",1,"tube-highlight"],["d","M 60,23 A 2400,2400 0 0,0 340,23 A 8,8 0 0,1 340,26 A 2400,2400 0 0,1 60,26 A 8,8 0 0,1 60,23 Z",1,"tube-highlight-secondary"],["d","M 60,30 A 2400,2400 0 0,0 340,30",1,"scale-line"],[1,"tick-marks"],["opacity","0.6"],[1,"scale-values"],["transform","translate(200 20) rotate(0)",1,"pointer"],["rx","6","ry","9"],["x","200","y","93","text-anchor","middle",1,"brand"],["viewBox","0 0 400 115","preserveAspectRatio","xMidYMid meet",1,"flex-element","scale"],["transform","translate(0,15)"],["x","200","y","22","text-anchor","middle",1,"angle"],["dx","-16",1,"side"],["d","M 40,0 A 400,400 0 0,0 360,0 A 10,10 0 0,1 360,20 A 400,400 0 0,1 40,20 A 10,10 0 0,1 40,0 Z",1,"tube-background"],["d","M 40,1 A 400,400 0 0,0 360,1 A 8,8 0 0,1 360,7 A 400,400 0 0,1 40,7 A 8,8 0 0,1 40,1 Z",1,"tube-highlight"],["d","M 40,13 A 400,400 0 0,0 360,13 A 8,8 0 0,1 360,16 A 400,400 0 0,1 40,16 A 8,8 0 0,1 40,13 Z",1,"tube-highlight-secondary"],["d","M 40,20 A 400,400 0 0,0 360,20",1,"scale-line"],["transform","translate(200 10) rotate(0)",1,"pointer"]],template:function(t,i){t&1&&(D(0,"div",2),oe(),D(1,"svg",3)(2,"defs")(3,"linearGradient",4),ee(4,"stop",5)(5,"stop",6)(6,"stop",7),G(),D(7,"filter",8),ee(8,"feGaussianBlur",9),D(9,"feSpecularLighting",10),ee(10,"fePointLight",11)(11,"fePointLight",12),G(),ee(12,"feComposite",13)(13,"feComposite",14),G()(),ee(14,"path",15)(15,"path",16)(16,"path",17)(17,"path",18,0),D(19,"g",19),ye(20,AS,1,5,":svg:line",null,Re),G(),D(22,"g",19),ye(23,CS,1,5,":svg:line",20,Re),G(),D(25,"g",21),ye(26,xS,2,3,":svg:text",null,Re),G(),D(28,"g",22),ee(29,"ellipse",23),G(),D(30,"text",24),c(31),G()(),D(32,"svg",25)(33,"g",26)(34,"text",27),c(35),D(36,"tspan",28),c(37),G()(),ee(38,"path",29)(39,"path",30)(40,"path",31)(41,"path",32,1),D(43,"g",19),ye(44,SS,1,5,":svg:line",null,Re),G(),D(46,"g",19),ye(47,wS,1,5,":svg:line",20,Re),G(),D(49,"g",21),ye(50,_S,2,3,":svg:text",null,Re),G(),D(52,"g",33),ee(53,"ellipse",23),G()()()()),t&2&&(f(20),Ae(i.fineTicks()),f(3),Ae(i.fineInnerTicks()),f(3),Ae(i.fineLabels()),f(2),Te("transition",i.ready()?i.pointerTransition():"none")("transform",i.finePointerTransform()),dt("ready",i.ready()),f(),ie("fill",i.themeColorValue()),f(2),Q(i.displayName()),f(3),ie("fill",i.themeColorValue()),f(),be(" ",i.displayValue(),"\xB0 "),f(2),Q(i.angleSide()),f(7),Ae(i.coarseTicks()),f(3),Ae(i.coarseInnerTicks()),f(3),Ae(i.coarseLabels()),f(2),Te("transition",i.ready()?i.pointerTransition():"none")("transform",i.coarsePointerTransform()),dt("ready",i.ready()),f(),ie("fill",i.themeColorValue()))},styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;font-family:Roboto}.container[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex-wrap:nowrap;align-items:stretch;justify-content:center;height:100%;width:100%;box-sizing:border-box;gap:0px}.brand[_ngcontent-%COMP%]{font-size:25px;font-weight:700;fill:var(--kip-contrast-dim-color)}.angle[_ngcontent-%COMP%]{font-size:50px;font-weight:700}.side[_ngcontent-%COMP%]{font-size:16px}svg.scale[_ngcontent-%COMP%]{width:100%;height:auto}svg.scale[_ngcontent-%COMP%] .tube-background[_ngcontent-%COMP%]{fill:var(--mat-sys-surface-container);filter:url(#tubeEffect)}svg.scale[_ngcontent-%COMP%] .tube-highlight[_ngcontent-%COMP%]{fill:url(#fineTubeGradient);opacity:.15;mix-blend-mode:soft-light;transition:fill .3s ease,opacity .3s ease}svg.scale[_ngcontent-%COMP%] .tube-highlight-secondary[_ngcontent-%COMP%]{fill:url(#fineTubeGradient);opacity:.2;mix-blend-mode:overlay;transition:fill .3s ease,opacity .3s ease}.tube-highlight-color[_ngcontent-%COMP%]{stop-color:var(--kip-contrast-color)}.opacity1[_ngcontent-%COMP%]{stop-opacity:.12}.opacity2[_ngcontent-%COMP%]{stop-opacity:.05}.opacity3[_ngcontent-%COMP%]{stop-opacity:0}svg.scale[_ngcontent-%COMP%] .scale-line[_ngcontent-%COMP%]{stroke:none;fill:none}.tick-marks[_ngcontent-%COMP%]{stroke:var(--kip-contrast-dim-color)}.scale-values[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);text-anchor:middle;dominant-baseline:hanging;font-size:12;font-weight:700}.pointer[_ngcontent-%COMP%] ellipse[_ngcontent-%COMP%]{stroke:#ffffff59;stroke-width:.7;paint-order:stroke fill;filter:drop-shadow(0 0 1px rgba(0,0,0,.55)) drop-shadow(0 1px 1.5px rgba(0,0,0,.55)) drop-shadow(0 -1px 1px rgba(255,255,255,.25));transition:filter .25s,stroke .25s}"],changeDetection:0})}return n})();var MS=["gaugeCanvas"];typeof steelseries>"u"&&(globalThis.steelseries={BackgroundColor:{DARK_GRAY:"darkGray",SATIN_GRAY:"satinGray",LIGHT_GRAY:"lightGray",WHITE:"white",BLACK:"black",BEIGE:"beige",BROWN:"brown",RED:"red",GREEN:"green",BLUE:"blue",ANTHRACITE:"anthracite",MUD:"mud",PUNCHED_SHEET:"punchedSheet",CARBON:"carbon",STAINLESS:"stainless",BRUSHED_METAL:"brushedMetal",BRUSHED_STAINLESS:"brushedStainless",TURNED:"turned"},FrameDesign:{BLACK_METAL:"blackMetal",METAL:"metal",SHINY_METAL:"shinyMetal",BRASS:"brass",STEEL:"steel",CHROME:"chrome",GOLD:"gold",ANTHRACITE:"anthracite",TILTED_GRAY:"tiltedGray",TILTED_BLACK:"tiltedBlack",GLOSSY_METAL:"glossyMetal"}});var Nd={darkGray:steelseries.BackgroundColor.DARK_GRAY,satinGray:steelseries.BackgroundColor.SATIN_GRAY,lightGray:steelseries.BackgroundColor.LIGHT_GRAY,white:steelseries.BackgroundColor.WHITE,black:steelseries.BackgroundColor.BLACK,beige:steelseries.BackgroundColor.BEIGE,brown:steelseries.BackgroundColor.BROWN,red:steelseries.BackgroundColor.RED,green:steelseries.BackgroundColor.GREEN,blue:steelseries.BackgroundColor.BLUE,anthracite:steelseries.BackgroundColor.ANTHRACITE,mud:steelseries.BackgroundColor.MUD,punchedSheet:steelseries.BackgroundColor.PUNCHED_SHEET,carbon:steelseries.BackgroundColor.CARBON,stainless:steelseries.BackgroundColor.STAINLESS,brushedMetal:steelseries.BackgroundColor.BRUSHED_METAL,brushedStainless:steelseries.BackgroundColor.BRUSHED_STAINLESS,turned:steelseries.BackgroundColor.TURNED},Od={blackMetal:steelseries.FrameDesign.BLACK_METAL,metal:steelseries.FrameDesign.METAL,shinyMetal:steelseries.FrameDesign.SHINY_METAL,brass:steelseries.FrameDesign.BRASS,steel:steelseries.FrameDesign.STEEL,chrome:steelseries.FrameDesign.CHROME,gold:steelseries.FrameDesign.GOLD,anthracite:steelseries.FrameDesign.ANTHRACITE,tiltedGray:steelseries.FrameDesign.TILTED_GRAY,tiltedBlack:steelseries.FrameDesign.TILTED_BLACK,glossyMetal:steelseries.FrameDesign.GLOSSY_METAL},hg=(()=>{class n{unitsService=A(He);canvasService=A(St);canvasRef=he("gaugeCanvas");widgetUUID=x(void 0);subType=x(void 0);barGauge=x(void 0);radialSize=x(void 0);backgroundColor=x(void 0);frameColor=x(void 0);minValue=x(void 0);maxValue=x(void 0);decimals=x(void 0);zones=x(void 0);title=x(void 0);units=x(void 0);value=x(void 0);theme=x(void 0,{alias:"themeColors"});gaugeStarted=!1;gauge;gaugeOptions={};paddingTop=0;lastSizeSignature="";resizeTimer=null;pendingStructuralRebuild=!1;ngOnInit(){this.buildOptions()}buildOptions(){this.gaugeOptions.minValue=this.minValue(),this.gaugeOptions.maxValue=this.maxValue();let e=this.decimals();this.gaugeOptions.lcdDecimals=e??2,this.gaugeOptions.titleString=this.title(),this.gaugeOptions.unitString=this.units(),this.subType()=="radial"&&(this.gaugeOptions.gaugeType=this.setGaugeType(this.radialSize()));let t=this.zones();if(t){let i=[],o=[],r=[...t].sort((s,l)=>s.lower-l.lower);for(let s of r){let l=null,m=null,h;switch(s.state){case J.Emergency:h=this.theme().zoneEmergency;break;case J.Alarm:h=this.theme().zoneAlarm;break;case J.Warn:h=this.theme().zoneWarn;break;case J.Alert:h=this.theme().zoneAlert;break;case J.Nominal:h=this.theme().zoneNominal;break;default:h="rgba(0,0,0,0)"}let v=this.units();if(v=="ratio"?(l=s.lower,m=s.upper):(l=this.unitsService.convertToUnit(v,s.lower),m=this.unitsService.convertToUnit(v,s.upper)),!(m<this.minValue()||l>this.maxValue())){if(l=l!==null?l:this.minValue(),m=m!==null?m:this.maxValue(),l=Math.max(l,this.minValue()),m>this.maxValue()){m=this.maxValue(),i.push(steelseries.Section(l,m,h));break}i.push(steelseries.Section(l,m,h))}}this.gaugeOptions.section=i,this.gaugeOptions.area=o,this.gaugeOptions.useSectionColors=!0}Nd[this.backgroundColor()]&&(this.gaugeOptions.backgroundColor=Nd[this.backgroundColor()]),Od[this.frameColor()]&&(this.gaugeOptions.frameDesign=Od[this.frameColor()]),this.barGauge()&&(this.gaugeOptions.valueColor=steelseries.ColorDef.GREEN),this.gaugeOptions.lcdVisible=!0,this.gaugeOptions.thresholdVisible=!1,this.gaugeOptions.threshold=this.maxValue(),this.gaugeOptions.ledVisible=!1}setGaugeType(e){switch(e){case"quarter":return steelseries.GaugeType.TYPE1;case"half":return steelseries.GaugeType.TYPE2;case"three-quarter":return steelseries.GaugeType.TYPE3;default:return steelseries.GaugeType.TYPE4}}startGauge(e=!1){this.buildOptions();let t=this.widgetUUID();if(!t)return;let i=e||this.pendingStructuralRebuild;if(this.gauge&&!i){this.gauge.setValueAnimated&&this.value()!=null,this.gaugeStarted=!0;return}this.pendingStructuralRebuild=!1,this.gaugeStarted=!0;let o=this.subType();o==="radial"?this.gauge=new steelseries.Radial(t,this.gaugeOptions):o==="linear"&&(this.barGauge()?this.gauge=new steelseries.LinearBargraph(t,this.gaugeOptions):this.gauge=new steelseries.Linear(t,this.gaugeOptions))}onResized(e){if(e.contentRect.height<50||e.contentRect.width<50)return;let t;if(this.subType()==="radial"){let i=Math.floor(Math.min(e.contentRect.height,e.contentRect.width));this.gaugeOptions.size=i,t="radial:"+i}else{let i=Math.floor(e.contentRect.width),o=Math.floor(e.contentRect.height);this.gaugeOptions.width=i,this.gaugeOptions.height=o,t=`linear:${i}x${o}`}t!==this.lastSizeSignature&&(this.lastSizeSignature=t,this.resizeTimer&&window.clearTimeout(this.resizeTimer),this.resizeTimer=window.setTimeout(()=>{this.startGauge(!0),this.resizeTimer=null},120))}ngOnChanges(e){this.gaugeStarted&&(e.value&&!e.value.firstChange&&this.gauge.setValueAnimated(e.value.currentValue),e.zones&&(this.pendingStructuralRebuild=!0,this.startGauge(!0)),e.title&&this.gauge.setTitleString(e.title.currentValue),e.backgroundColor&&this.gauge.setBackgroundColor(Nd[e.backgroundColor.currentValue]),e.frameColor&&this.gauge.setFrameDesign(Od[e.frameColor.currentValue]),e.radialSize&&(this.pendingStructuralRebuild=!0,this.startGauge(!0)),e.minValue&&this.gauge.setMinValue(e.minValue.currentValue),e.maxValue&&this.gauge.setMaxValue(e.maxValue.currentValue))}ngOnDestroy(){if(this.gauge&&this.gauge.setValue){let t=this.gauge.getValue?this.gauge.getValue():this.value();this.gauge.setValue(t)}let e=this.widgetUUID();if(e){let t=document.getElementById(e);this.canvasService.releaseCanvas(t,{clear:!0,removeFromDom:!0})}this.gauge=null}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["gauge-steel"]],viewQuery:function(t,i){t&1&&_e(i.canvasRef,MS,5),t&2&&Me()},inputs:{widgetUUID:[1,"widgetUUID"],subType:[1,"subType"],barGauge:[1,"barGauge"],radialSize:[1,"radialSize"],backgroundColor:[1,"backgroundColor"],frameColor:[1,"frameColor"],minValue:[1,"minValue"],maxValue:[1,"maxValue"],decimals:[1,"decimals"],zones:[1,"zones"],title:[1,"title"],units:[1,"units"],value:[1,"value"],theme:[1,"themeColors","theme"]},features:[dn],decls:4,vars:2,consts:[["gaugeCanvas",""],["kipResizeObserver","",1,"wrapper",3,"resizeChange"],[2,"z-index","inherit",3,"id"]],template:function(t,i){t&1&&(d(0,"div",1),$("resizeChange",function(r){return i.onResized(r)}),d(1,"canvas",2,0),c(3," Browser does not support canvas element. "),u()()),t&2&&(f(),R("id",Yi(i.widgetUUID())))},dependencies:[oi],styles:[".sgWrapper[_ngcontent-%COMP%]{height:100%;width:100%;text-align:center}"],changeDetection:0})}return n})();var pg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);metadata=A(bi);static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Gauge Label",filterSelfPaths:!0,paths:{gaugePath:{description:"Numeric Data",path:null,source:null,pathType:"number",isPathConfigurable:!0,showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,convertUnitTo:"unitless",sampleTime:500}},displayScale:{type:"linear",lower:0,upper:100},gauge:{type:"steel",subType:"radial",backgroundColor:"carbon",faceColor:"anthracite",radialSize:"full",rotateFace:!1,digitalMeter:!1},numDecimal:2,enableTimeout:!1,dataTimeout:5,ignoreZones:!1};dataValue=w(0);zones=w([]);displayName=L(()=>this.runtime.options()?.displayName||"Gauge Label");constructor(){W(()=>{let e=this.runtime.options();!e||!e.paths?.gaugePath?.path||z(()=>this.streams.observe("gaugePath",i=>{let o=i?.data?.value,r=e.displayScale?.lower??0,s=e.displayScale?.upper??r+100;if(o==null)this.dataValue.set(r);else{let l=Math.min(Math.max(o,r),s);this.dataValue.set(l)}}))}),W(()=>{let e=this.runtime.options();if(!e)return;if(e.ignoreZones){this.zones.set([]);return}if(!e.paths?.gaugePath?.path){this.zones.set([]);return}z(()=>this.metadata.observe("gaugePath")),this.zones.set(this.metadata.zones())})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-gauge-steel"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:14,consts:[[1,"wrapper"],[3,"widgetUUID","subType","barGauge","radialSize","backgroundColor","frameColor","minValue","maxValue","decimals","zones","title","units","value","themeColors"]],template:function(t,i){if(t&1&&(d(0,"div",0),O(1,"gauge-steel",1),u()),t&2){let o,r,s,l,m,h,v,y,C;f(),R("widgetUUID",i.id())("subType",(o=i.runtime.options())==null||o.gauge==null?null:o.gauge.subType)("barGauge",(r=i.runtime.options())==null||r.gauge==null?null:r.gauge.digitalMeter)("radialSize",(s=i.runtime.options())==null||s.gauge==null?null:s.gauge.radialSize)("backgroundColor",(l=i.runtime.options())==null||l.gauge==null?null:l.gauge.backgroundColor)("frameColor",(m=i.runtime.options())==null||m.gauge==null?null:m.gauge.faceColor)("minValue",(h=i.runtime.options())==null||h.displayScale==null?null:h.displayScale.lower)("maxValue",(v=i.runtime.options())==null||v.displayScale==null?null:v.displayScale.upper)("decimals",(y=i.runtime.options())==null?null:y.numDecimal)("zones",i.zones())("title",i.displayName())("units",(C=i.runtime.options())==null||C.paths==null||C.paths.gaugePath==null?null:C.paths.gaugePath.convertUnitTo)("value",i.dataValue())("themeColors",i.theme())}},dependencies:[hg],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}gauge-steel[_ngcontent-%COMP%]{display:block;position:relative;width:100%;height:100%} .wrapper{display:block;position:relative;width:100%;height:100%;padding:10px} .wrapper>canvas{display:block;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}"],changeDetection:0})}return n})();var pa=fc(Vd(),1),bg=fc(Vd(),1);var TS=["gauge"],kS=n=>n.replace(/(\-\w)/g,a=>a[1].toUpperCase()),DS=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),gg=n=>kS(n),fg=(()=>{class n{el;zone;canvas;gauge;isInited=!1;preInitValue;preInitOptions;domListener;constructor(e,t){this.el=e,this.zone=t}get options(){let e={};e.renderTo=this.canvas.nativeElement;for(let t of this.el.nativeElement.attributes){let i=gg(t.name);e[i]=pa.DomObserver.parse(t.value)}for(let t in this.preInitOptions)e[t]=this.preInitOptions[t];return this.isInited&&(this.preInitOptions=null),e}set options(e){if(!this.isInited){this.preInitOptions=e;return}this.update(e)}set value(e){if(!this.isInited){this.preInitValue=e;return}this.zone.runOutsideAngular(()=>{this.gauge.value=e})}update(e){if(e)for(let t in e){let i=e[t].toString();if(t==="value")this.value=pa.DomObserver.parse(i);else{let o=DS(t);this.el.nativeElement.setAttribute(o,i)}}}ngOnDestroy(){this.destroy(),this.cleanup()}cleanup(){}destroy(){this.stopListeningForDOMEvents(),this.gauge.destroy()}ngAfterViewInit(){this.initGauge(),this.listenForDOMEvents(),this.isInited=!0,this.preInitValue&&(this.value=this.preInitValue)}listenForDOMEvents(){this.domListener=new MutationObserver(e=>{let t={};e.forEach(i=>{i.type==="attributes"&&(t[gg(i.attributeName)]=pa.DomObserver.parse(this.el.nativeElement.getAttribute(i.attributeName)))}),this.basicUpdate(t)}),this.domListener.observe(this.el.nativeElement,{attributes:!0})}stopListeningForDOMEvents(){this.domListener&&(this.domListener.disconnect(),this.domListener=null)}initGauge(){let e=this.options;(!e.hasOwnProperty("renderTo")||!e.renderTo)&&(e.renderTo=this.canvas.nativeElement),this.basicUpdate(e)}basicUpdate(e){typeof e.value=="number"&&(this.value=e.value,delete e.value),Object.keys(e).length&&this.gauge.update(e)}static \u0275fac=function(t){return new(t||n)(wa(nt),wa(Je))};static \u0275dir=Gt({type:n,viewQuery:function(t,i){if(t&1&&$n(TS,7),t&2){let o;Mi(o=Ti())&&(i.canvas=o.first)}},inputs:{options:"options",value:"value"}})}return n})();var vg=(()=>{class n extends fg{constructor(e,t){super(e,t)}ngOnInit(){this.gauge=new pa.LinearGauge(this.options).draw()}static \u0275fac=function(t){return new(t||n)(wa(nt),wa(Je))};static \u0275cmp=H({type:n,selectors:[["linear-gauge"]],features:[Qo],decls:2,vars:0,consts:[["gauge",""]],template:function(t,i){t&1&&O(0,"canvas",null,0)},encapsulation:2})}return n})();var fl=(()=>{class n extends fg{constructor(e,t){super(e,t)}ngOnInit(){this.gauge=new pa.RadialGauge(this.options).draw()}static \u0275fac=function(t){return new(t||n)(wa(nt),wa(Je))};static \u0275cmp=H({type:n,selectors:[["radial-gauge"]],features:[Qo],decls:2,vars:0,consts:[["gauge",""]],template:function(t,i){t&1&&O(0,"canvas",null,0)},encapsulation:2})}return n})(),No=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=cn({type:n});static \u0275inj=ln({})}return n})();function vl(n,a,e=!1){let t=[],i=a-n,o=0,r=10;i=yg(a-n,!1),o=yg(i/(r-1),!0);let s=Math.floor(n/o)*o,l=Math.ceil(a/o)*o;t.push(s);let m=i/o;for(let h=0;h<m;h++)if(t[h]<l){let v=(Number(t[h].toFixed(2))*100+Number(o.toFixed(2))*100)/100;t.push(v)}if(t[t.length-1]!==l&&t.push(l),e){let h=[...t].reverse();return{min:s,max:l,majorTicks:h}}return{min:s,max:l,majorTicks:t}}function yg(n,a){let e=Math.floor(Math.log10(n)),t=n/Math.pow(10,e),i=null;return a?1.5>t?i=1:3>t?i=2:7>t?i=5:i=10:1>=t?i=1:2>=t?i=2:5>=t?i=5:i=10,i*Math.pow(10,e)}var Ag=["radialGauge"];function ES(n,a){if(n&1){let e=we();d(0,"radial-gauge",2,0),$("resizeChange",function(i){ne(e);let o=T();return ae(o.onResized(i))}),u()}if(n&2){let e=T();R("options",e.gaugeOptions)("value",e.value()),ie("value-text",e.textValue())}}var Cg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);metadata=A(bi);unitsService=A(He);static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Gauge Label",filterSelfPaths:!0,paths:{gaugePath:{description:"Numeric Data",path:null,source:null,pathType:"number",suppressBootstrapNull:!0,isPathConfigurable:!0,showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,convertUnitTo:"unitless",sampleTime:500}},displayScale:{lower:0,upper:100,type:"linear"},gauge:{type:"ngRadial",subType:"measuring",highlightsWidth:5,scaleStart:180,barStartPosition:"left",enableTicks:!0,enableProgressbar:!0,enableNeedle:!0},numInt:1,numDecimal:0,enableTimeout:!1,color:"contrast",dataTimeout:5,ignoreZones:!1};LINE="line";ANIMATION_TARGET_NEEDLE="needle";ngGauge=he("radialGauge");gauge=he("radialGauge",{read:nt});value=w(void 0);shouldRenderGauge=L(()=>this.value()!==void 0);textValue=w("--");colorStrokeTicks=w("");gaugeBootstrapped=w(!1);animationEnabled=L(()=>this.gaugeBootstrapped());adjustedScale=L(()=>{let e=this.runtime.options();return e?e.gauge?.subType==="capacity"?{min:e.displayScale?.lower??0,max:e.displayScale?.upper??100,majorTicks:[]}:vl(e.displayScale?.lower??0,e.displayScale?.upper??100,e.gauge?.barStartPosition==="right"):{min:0,max:100,majorTicks:[]}});highlights=L(()=>{let e=this.metadata.zones(),t=this.runtime.options(),i=this.theme();if(!e?.length)return[];if(!t||!i)return[];if(t.ignoreZones)return[];if(t.gauge?.subType!=="measuring")return[];let o=t.paths?.gaugePath,r=this.adjustedScale(),s=t.gauge?.barStartPosition==="right";return ko(e,i,o.convertUnitTo,this.unitsService,r.min,r.max,s)});displayName=L(()=>this.runtime.options()?.displayName);pathDataState=w(null);viewReady=w(!1);gaugeOptions={};constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||e.paths?.gaugePath.path&&z(()=>this.streams.observe("gaugePath",i=>{i.state!==this.pathDataState()&&this.pathDataState.set(i.state||null);let o=i?.data?.value??null;if(o==null)this.value.set(e.displayScale?.lower??0),this.textValue.set("--");else{let r=e.displayScale?.lower??0,s=e.displayScale?.upper??100,l=Math.min(Math.max(o,r),s);this.value.set(l),this.textValue()==="--"&&this.textValue.set("")}}))}),W(()=>{let e=this.runtime.options();!e||e.ignoreZones||z(()=>this.metadata.observe("gaugePath"))}),W(()=>{let e=this.highlights();this.viewReady()&&z(()=>{try{if(!e.length)this.ngGauge()?.update({highlights:[]});else{let t=JSON.stringify(e);this.ngGauge()?.update({highlights:t,highlightsWidth:this.runtime.options().gauge?.highlightsWidth})}}catch(t){}})}),W(()=>{let e=this.theme(),t=this.adjustedScale();z(()=>{if(this.buildGaugeOptions(this.runtime.options(),e,t),this.viewReady())try{this.ngGauge()?.update(this.gaugeOptions)}catch(i){}})}),W(()=>{let e=this.ngGauge();!e||this.gaugeBootstrapped()||z(()=>{try{requestAnimationFrame(()=>{this.gaugeBootstrapped.set(!0);try{e.update({animation:!0,animatedValue:!0})}catch(t){}})}catch(t){}})}),W(()=>{let e=this.pathDataState();this.viewReady()&&z(()=>{let t=this.runtime.options(),i=this.theme();if(t.ignoreZones)return;let o={};switch(e){case J.Alarm:o.colorBorderMiddle=i.cardColor,o.colorBarProgress=i.zoneAlarm,o.colorValueText=i.zoneAlarm;break;case J.Warn:o.colorBorderMiddle=i.cardColor,o.colorBarProgress=i.zoneWarn,o.colorValueText=i.zoneWarn;break;case J.Alert:o.colorBorderMiddle=i.cardColor,o.colorBarProgress=i.zoneAlert,o.colorValueText=i.zoneAlert;break;default:o.colorBorderMiddle=i.cardColor,o.colorBarProgress=t.gauge?.subType==="measuring"?Ce(t.color,i).color:Ce(t.color,i).dim,o.colorValueText=Ce(t.color,i).color}try{this.ngGauge()?.update(o)}catch(r){}})})}ngAfterViewInit(){this.viewReady.set(!0),this.setCanvasSize();try{this.ngGauge()?.update(this.gaugeOptions)}catch(e){}}onResized(e){let t={height:e.contentRect.height,width:e.contentRect.width};try{this.ngGauge()?.update(t)}catch(i){}}setCanvasSize(){let e=this.gauge()?.nativeElement;if(!e)return;let t=e.getBoundingClientRect(),i={height:t.height,width:t.width};try{this.ngGauge()?.update(i)}catch(o){}}buildGaugeOptions(e,t,i){let o={};o.title=this.displayName(),o.minValue=i.min,o.maxValue=i.max,o.units=e.paths?.gaugePath?.convertUnitTo,o.highlights=[];let r=this.highlights();r.length&&(o.highlights=JSON.stringify(r),o.highlightsWidth=e.gauge?.highlightsWidth),o.fontTitle="Roboto",o.fontTitleWeight="bold",o.fontUnits="Roboto",o.fontUnitsSize=25,o.fontUnitsWeight="normal",o.barStrokeWidth=0,o.barShadow=0,o.colorBarStroke="",o.fontValue="Roboto",o.fontValueWeight="bold",o.valueTextShadow=!1,o.colorValueBoxShadow="",o.fontNumbers="Roboto",o.fontNumbersWeight="bold",o.valueInt=e.numInt??1,o.valueDec=e.numDecimal??2,o.majorTicksInt=o.valueInt,o.majorTicksDec=o.valueDec,o.highlightsWidth=e.gauge?.highlightsWidth,o.animation=this.animationEnabled(),o.animateOnInit=!1,o.animatedValue=this.animationEnabled(),o.animationRule="linear";let s=e.paths?.gaugePath?.sampleTime??500;o.animationDuration=s-25,o.colorBorderShadow=!1,o.colorBorderOuter=t.cardColor,o.colorBorderOuterEnd="",o.colorBorderMiddle=t.cardColor,o.colorBorderMiddleEnd="",o.colorPlate=o.colorPlateEnd=t.cardColor,o.colorBar=t.background,o.barProgress=e.gauge?.enableProgressbar,o.colorBarProgress=Ce(e.color,t).color,o.colorNeedle=Ce(e.color,t).color,o.colorNeedleEnd=Ce(e.color,t).color,o.needleShadow=!0,o.colorNeedleShadowUp="black",o.colorNeedleShadowDown="black",o.colorNeedleCircleInner=o.colorPlate,o.colorNeedleCircleInnerEnd=o.colorPlate,o.colorNeedleCircleOuter=o.colorPlate,o.colorNeedleCircleOuterEnd=o.colorPlate,o.colorTitle=t.contrastDim,o.colorUnits=t.contrastDim,o.colorValueText=Ce(e.color,t).color,this.colorStrokeTicks.set(t.contrastDim),o.colorMinorTicks=t.contrastDim,o.animationTarget=this.ANIMATION_TARGET_NEEDLE,o.useMinPath=!1,e.gauge?.subType==="capacity"?(o.fontTitleSize=40,o.valueBox=!0,o.fontValueSize=60,o.valueBoxWidth=10,o.valueBoxBorderRadius=5,o.valueBoxStroke=0,o.colorValueBoxBackground="",o.colorMajorTicks=o.colorPlate,o.colorNumbers=o.colorMinorTicks="",o.barWidth=20,o.colorBarProgress=Ce(e.color,t).dim,o.needle=e.gauge.enableNeedle,o.needleType=this.LINE,o.needleWidth=2,o.needleStart=75,o.needleEnd=95,o.needleCircleSize=1,o.needleCircleInner=!1,o.needleCircleOuter=!1,o.ticksAngle=360,o.startAngle=e.gauge?.scaleStart||180,o.majorTicks=0,o.exactTicks=!0,o.strokeTicks=!1,o.minorTicks=0,o.numbersMargin=0,o.fontNumbersSize=0,o.borders=!0,o.borderOuterWidth=2,o.borderMiddleWidth=1,o.borderInnerWidth=0,o.borderShadowWidth=0):(o.fontTitleSize=24,o.barWidth=15,o.valueBox=!0,o.fontValueSize=60,o.valueBoxWidth=100,o.valueBoxBorderRadius=0,o.valueBoxStroke=0,o.colorValueBoxBackground="",o.needle=e.gauge.enableNeedle,o.needleType=this.LINE,o.needleWidth=2,o.needleStart=0,o.needleEnd=95,o.needleCircleSize=10,o.needleCircleInner=!1,o.needleCircleOuter=!1,o.ticksAngle=270,o.startAngle=45,o.barStartPosition=e.gauge?.barStartPosition||"left",e.gauge.enableTicks?(o.strokeTicks=!0,o.majorTicks=i.majorTicks,o.minorTicks=2,o.exactTicks=!1,o.numbersMargin=3,o.fontNumbersSize=15,o.colorMajorTicks=t.contrastDim,o.colorNumbers=t.contrastDim):(o.strokeTicks=!1,o.majorTicks=0,o.minorTicks=0,o.exactTicks=!0,o.numbersMargin=0,o.fontNumbersSize=0,o.colorMajorTicks=o.colorPlate,o.colorNumbers=o.colorMinorTicks=""),o.borders=!0,o.borderOuterWidth=2,o.borderMiddleWidth=1,o.borderInnerWidth=0,o.borderShadowWidth=0,o.animationTarget=this.ANIMATION_TARGET_NEEDLE,o.useMinPath=!1),this.gaugeOptions=o}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-gauge-ng-radial"]],viewQuery:function(t,i){t&1&&_e(i.ngGauge,Ag,5)(i.gauge,Ag,5,nt),t&2&&Me(2)},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:1,vars:1,consts:[["radialGauge",""],["kipResizeObserver","",3,"options","value"],["kipResizeObserver","",3,"resizeChange","options","value"]],template:function(t,i){t&1&&I(0,ES,2,3,"radial-gauge",1),t&2&&P(i.shouldRenderGauge()?0:-1)},dependencies:[oi,No,fl],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%} radial-gauge{display:block;position:relative;width:100%;min-width:8px;height:100%;overflow:clip} radial-gauge>canvas{display:block;position:absolute;height:100%;width:100%;left:50%;top:50%;transform:translate(-50%,-50%);padding:0}"],changeDetection:0})}return n})();var xg=["linearGauge"];function IS(n,a){if(n&1){let e=we();d(0,"linear-gauge",2,0),$("resizeChange",function(i){ne(e);let o=T();return ae(o.onResized(i))}),u()}if(n&2){let e=T();R("options",e.gaugeOptions)("value",e.value()),ie("value-text",e.textValue())}}var Sg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);metadata=A(bi);unitsService=A(He);static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!0,displayName:"Gauge Label",filterSelfPaths:!0,paths:{gaugePath:{description:"Numeric Data",path:null,source:null,pathType:"number",suppressBootstrapNull:!0,isPathConfigurable:!0,showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,convertUnitTo:"unitless",sampleTime:500}},displayScale:{lower:0,upper:100,type:"linear"},gauge:{type:"ngLinear",subType:"vertical",highlightsWidth:5,enableTicks:!0,enableNeedle:!1},numInt:1,numDecimal:0,color:"contrast",enableTimeout:!1,dataTimeout:5,ignoreZones:!1};ngGauge=he("linearGauge");gauge=he("linearGauge",{read:nt});textValue=w("--");value=w(void 0);shouldRenderGauge=L(()=>this.value()!==void 0);gaugeOptions={};viewReady=w(!1);gaugeBootstrapped=w(!1);animationEnabled=L(()=>this.gaugeBootstrapped());currentState=w(J.Normal);adjustedScale=L(()=>{let e=this.runtime.options();return e?e.gauge?.enableTicks?vl(e.displayScale.lower,e.displayScale.upper):{min:e.displayScale.lower,max:e.displayScale.upper,majorTicks:[]}:{min:0,max:100,majorTicks:[]}});highlights=L(()=>{let e=this.metadata.zones(),t=this.runtime.options(),i=this.theme();return e?.length?!t||!i?[]:t.ignoreZones?[]:t.paths?.gaugePath?ko(e,i,t.paths.gaugePath.convertUnitTo,this.unitsService,this.adjustedScale().min,this.adjustedScale().max):[]:[]});displayName=L(()=>this.runtime.options()?.displayName||"Gauge Label");constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||e.paths?.gaugePath.path&&z(()=>this.streams.observe("gaugePath",i=>{let o=i?.data?.value??null;if(o==null)this.value.set(e.displayScale.lower),this.textValue.set("--");else{let r=Math.min(Math.max(o,e.displayScale.lower),e.displayScale.upper);this.value.set(r),this.textValue()==="--"&&this.textValue.set("")}i.state!==this.currentState()&&this.currentState.set(i.state)}))}),W(()=>{let e=this.runtime.options();!e||e.ignoreZones||z(()=>this.metadata.observe("gaugePath"))}),W(()=>{let e=this.highlights();this.viewReady()&&z(()=>{try{if(!e.length)this.ngGauge()?.update({highlights:[]});else{let t=JSON.stringify(e);this.ngGauge()?.update({highlights:t,highlightsWidth:this.runtime.options().gauge?.highlightsWidth})}}catch(t){}})}),W(()=>{let e=this.theme(),t=this.adjustedScale();z(()=>{if(this.buildGaugeOptions(this.runtime.options(),e,t),this.viewReady())try{this.ngGauge()?.update(this.gaugeOptions),this.applyInitialSize()}catch(i){}})}),W(()=>{let e=this.ngGauge();!e||this.gaugeBootstrapped()||z(()=>{try{requestAnimationFrame(()=>{this.gaugeBootstrapped.set(!0);try{e.update({animation:!0,animatedValue:!0})}catch(t){}})}catch(t){}})}),W(()=>{let e=this.currentState();this.viewReady()&&z(()=>{let t=this.runtime.options(),i=this.theme();if(t.ignoreZones)return;let o={},r=t.gauge?.enableNeedle,s=Ce(t.color,i);switch(e){case J.Alarm:r?(o.colorNeedle=i.zoneAlarm,o.colorValueText=i.zoneAlarm):(o.colorBarProgress=i.zoneAlarm,o.colorValueText=i.zoneAlarm);break;case J.Warn:r?(o.colorNeedle=i.zoneWarn,o.colorValueText=i.zoneWarn):(o.colorBarProgress=i.zoneWarn,o.colorValueText=i.zoneWarn);break;case J.Alert:r?(o.colorNeedle=i.zoneAlert,o.colorValueText=i.zoneAlert):(o.colorBarProgress=i.zoneAlert,o.colorValueText=i.zoneAlert);break;default:r?(o.colorNeedle=s.color,o.colorValueText=s.color):(o.colorBarProgress=s.color,o.colorValueText=s.color)}try{this.ngGauge()?.update(o)}catch(l){}})})}buildGaugeOptions(e,t,i){let o=this.gaugeOptions={},r=e.gauge?.subType==="vertical",s=e.gauge?.enableNeedle,l=e.gauge?.enableTicks;o.minValue=i.min,o.maxValue=i.max,o.valueInt=e.numInt??1,o.valueDec=e.numDecimal??2,o.title=this.displayName(),o.fontTitleSize=40,o.fontTitle="Roboto",o.fontTitleWeight="bold",o.barLength=r?80:90,o.barWidth=l?s?0:30:60,o.barProgress=!0,o.barBeginCircle=0,o.barStrokeWidth=0,o.barShadow=0,o.needle=!!s,o.needleType=s?"arrow":"line",o.needleStart=s?r?200:155:-45,o.needleEnd=s?r?175:180:55,o.needleShadow=!0,o.needleSide="both",o.units=e.paths?.gaugePath?.convertUnitTo,o.fontUnits="Roboto",o.fontUnitsWeight="normal",o.borders=!1,o.borderOuterWidth=0,o.borderMiddleWidth=0,o.borderInnerWidth=0,o.borderShadowWidth=0,o.borderRadius=0,o.valueBox=!0,o.valueBoxWidth=35,o.valueBoxStroke=0,o.valueBoxBorderRadius=10,o.colorValueBoxRect="",o.colorValueBoxRectEnd="",o.colorValueBoxShadow="",o.fontValueSize=50,o.fontValue="Roboto",o.fontValueWeight="bold",o.valueTextShadow=!1,o.fontNumbers="Roboto",o.fontNumbersWeight="normal",o.fontUnitsSize=r?40:35,o.colorTitle=Ce("contrast",t).dim,o.colorUnits=Ce("contrast",t).dim,o.colorValueBoxBackground=t.background;let m=Ce(e.color,t);o.colorValueText=m.color,s?(o.colorNeedle=m.color,o.colorNeedleEnd=m.color,o.needleWidth=45,o.colorNeedleShadowUp=m.color,o.colorNeedleShadowDown=m.color):(o.colorBarProgress=m.color,o.colorBarProgressEnd="",o.needleWidth=0),o.colorPlate=t.cardColor,o.colorBar=t.background,o.colorBarEnd="",o.colorBarStroke="0",o.colorMajorTicks=Ce("contrast",t).dim,o.colorMinorTicks=Ce("contrast",t).dim,o.colorNumbers=Ce("contrast",t).dim,o.majorTicks=l?i.majorTicks:[],o.majorTicksInt=e.numInt??1,o.majorTicksDec=e.numDecimal??2,o.strokeTicks=!!l,o.minorTicks=l?2:0,o.ticksWidthMinor=l?6:0,o.numberSide=s?"right":"left",o.fontNumbersSize=l?r?22:30:0,o.numbersMargin=r?s?-7:-3:s?-33:-5,o.ticksWidth=l?s&&r?15:10:0,o.ticksPadding=l?r?s?0:5:s?9:8:0,o.tickSide="left",o.animation=this.animationEnabled(),o.animationRule="linear",o.animatedValue=this.animationEnabled(),o.animateOnInit=!1,o.animationDuration=(e.paths?.gaugePath?.sampleTime??500)-25,o.highlights=[],o.highlightsWidth=e.gauge?.highlightsWidth;let h=this.highlights();h.length&&(o.highlights=JSON.stringify(h))}ngAfterViewInit(){this.viewReady.set(!0),this.applyInitialSize();try{this.ngGauge()?.update(this.gaugeOptions)}catch(e){}}applyInitialSize(){let e=this.gauge()?.nativeElement;if(!e)return;let t=e.getBoundingClientRect(),i=.3,o,r;this.runtime.options()?.gauge?.subType==="vertical"?(o=t.height,r=t.height*i):(r=t.width,o=t.width*i);let m={height:o,width:r};try{this.ngGauge()?.update(m)}catch(h){}}onResized(e){let t=this.runtime.options();if(!t)return;let i=.3,o=t.gauge?.subType==="vertical",r={};o?(r.height=e.contentRect.height,r.width=r.height*i,r.width>e.contentRect.width&&(r.width=e.contentRect.width,r.height=r.width/i)):(r.width=e.contentRect.width,r.height=r.width*i,r.height>e.contentRect.height&&(r.height=e.contentRect.height,r.width=r.height/i)),r.height=(r.height??0)-10;try{this.ngGauge()?.update(r)}catch(s){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-gauge-ng-linear"]],viewQuery:function(t,i){t&1&&_e(i.ngGauge,xg,5)(i.gauge,xg,5,nt),t&2&&Me(2)},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:1,vars:1,consts:[["linearGauge",""],["kipResizeObserver","",1,"linearGauge",3,"options","value"],["kipResizeObserver","",1,"linearGauge",3,"resizeChange","options","value"]],template:function(t,i){t&1&&I(0,IS,2,3,"linear-gauge",1),t&2&&P(i.shouldRenderGauge()?0:-1)},dependencies:[oi,No,vg],styles:["[_nghost-%COMP%]{width:100%;height:100%;display:block} linear-gauge{display:block;position:relative;width:100%;min-width:8px;height:100%;overflow:clip} linear-gauge>canvas{display:block;position:absolute;height:100%;width:100%;left:50%;top:50%;transform:translate(-50%,-50%);margin-top:5px}"],changeDetection:0})}return n})();var wg=["compassGauge"];function PS(n,a){if(n&1){let e=we();d(0,"radial-gauge",2,0),$("resizeChange",function(i){ne(e);let o=T();return ae(o.onResized(i))}),u()}if(n&2){let e=T();R("options",e.gaugeOptions)("value",e.value()),ie("value-text",e.textValue())("color-stroke-ticks",e.colorStrokeTicks)}}function _g(n){let a=n.match(/(\d+(\.\d+)?|\.\d+)/g);if(!a||a.length<3)throw new Error("Invalid RGBA format");let[e,t,i,o=1]=a.map(Number),r=o===1?"":Math.round(o*255).toString(16).padStart(2,"0").toUpperCase();return"#"+((1<<24)+(e<<16)+(t<<8)+i).toString(16).slice(1).toUpperCase()+r}function RS(n){return n<0&&(n=360+n),n}var Mg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);static DEFAULT_CONFIG={displayName:"Gauge Label",filterSelfPaths:!0,paths:{gaugePath:{description:"Numeric Data",path:null,source:null,pathType:"number",suppressBootstrapNull:!0,isPathConfigurable:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",showConvertUnitTo:!1,convertUnitTo:"deg",sampleTime:500}},supportAutomaticHistoricalSeries:!0,gauge:{type:"ngRadial",subType:"baseplateCompass",enableTicks:!0,compassUseNumbers:!1,showValueBox:!1},enableTimeout:!1,color:"contrast",dataTimeout:5};LINE="line";NEEDLE_START=40;NEEDLE_END=100;NEEDLE_CIRCLE_SIZE=15;BORDER_MIDDLE_WIDTH=2;BORDER_INNER_WIDTH=2;ANIMATION_TARGET_PLATE="plate";ANIMATION_TARGET_NEEDLE="needle";textValue=w("--");value=w(void 0);shouldRenderGauge=L(()=>this.value()!==void 0);gaugeBootstrapped=w(!1);animationEnabled=L(()=>this.gaugeBootstrapped());ngGauge=he("compassGauge");gauge=he("compassGauge",{read:nt});viewReady=w(!1);gaugeOptions={};colorStrokeTicks="";currentState=w(J.Normal);lastAppliedState=null;negToPortPaths=["self.environment.wind.angleApparent","self.environment.wind.angleTrueGround","self.environment.wind.angleTrueWater","self.environment.wind.angleTrueWaterDamped","self.performance.beatAngle","self.performance.gybeAngle","self.performance.targetAngle","self.performance.optimumWindAngle"];displayName=L(()=>this.runtime.options()?.displayName);constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();if(!e||!t)return;let i=e.paths?.gaugePath;i?.path&&z(()=>this.streams.observe("gaugePath",o=>{let r=o?.data?.value??null;if(r==null)this.value.set(0),this.textValue.set("--");else{this.negToPortPaths.includes(i.path)&&(r=RS(r));let l=Math.min(Math.max(r,0),360);this.value.set(l),this.textValue.set(l.toFixed(0))}let s=o?.state??J.Normal;s!==this.currentState()&&this.currentState.set(s)}))}),W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{if(this.buildGaugeOptions(e,t),this.viewReady())try{this.ngGauge()?.update(this.gaugeOptions)}catch(i){}})}),W(()=>{let e=this.ngGauge();!e||this.gaugeBootstrapped()||z(()=>{try{requestAnimationFrame(()=>{this.gaugeBootstrapped.set(!0);try{e.update({animation:!0,animatedValue:!0})}catch(t){}})}catch(t){}})}),W(()=>{let e=this.runtime.options(),t=this.theme(),i=this.currentState();!e||!t||this.viewReady()&&i!==this.lastAppliedState&&z(()=>{let o={};switch(i){case J.Emergency:o.colorValueText=t.zoneEmergency;break;case J.Alarm:o.colorValueText=t.zoneAlarm;break;case J.Warn:o.colorValueText=t.zoneWarn;break;case J.Alert:o.colorValueText=t.zoneAlert;break;default:o.colorValueText=t.contrast;break}try{this.ngGauge()?.update(o)}catch(r){}this.lastAppliedState=i})})}buildGaugeOptions(e,t){let i=this.gaugeOptions={};i.title=this.displayName(),i.minValue=0,i.maxValue=360,i.units=e.paths?.gaugePath?.convertUnitTo||"",i.valueDec=e.numDecimal??0,i.valueInt=e.numInt??1,i.barProgress=!1,i.barWidth=0,i.valueBox=!!e.gauge?.showValueBox,i.fontValueSize=60,i.valueBoxWidth=30,i.valueBoxBorderRadius=10,i.valueBoxStroke=0,i.ticksAngle=360,i.startAngle=180,i.exactTicks=!1,i.strokeTicks="",i.majorTicks=e.gauge?.compassUseNumbers?["N","30","60","E","120","150","S","210","240","W","300","330","N"]:["N","NE","E","SE","S","SW","W","NW","N"],i.majorTicksDec=0,i.majorTicksInt=1,i.numbersMargin=5,i.fontNumbersSize=25,i.minorTicks=e.gauge?.compassUseNumbers?3:2,i.needle=!0,i.needleType=this.LINE,i.needleStart=this.NEEDLE_START,i.needleEnd=this.NEEDLE_END,i.needleCircleSize=this.NEEDLE_CIRCLE_SIZE,i.needleWidth=4,i.needleShadow=!1,i.needleCircleInner=!1,i.needleCircleOuter=!1,i.borders=!0,i.borderOuterWidth=0,i.borderMiddleWidth=this.BORDER_MIDDLE_WIDTH,i.borderInnerWidth=this.BORDER_INNER_WIDTH,i.borderShadowWidth=0,i.highlights=[],i.highlightsWidth=0,i.fontTitle="Roboto",i.fontTitleWeight="normal",i.fontTitleSize=25,i.fontUnits="Roboto",i.fontUnitsSize=25,i.fontUnitsWeight="normal",i.barStrokeWidth=0,i.barShadow=0,i.fontValue="Roboto",i.fontValueWeight="bold",i.valueTextShadow=!1,i.colorValueBoxShadow="",i.fontNumbers="Roboto",i.fontNumbersWeight="bold",e.gauge?.subType==="marineCompass"?(i.animationTarget=this.ANIMATION_TARGET_PLATE,i.useMinPath=!0):(i.animationTarget=this.ANIMATION_TARGET_NEEDLE,i.useMinPath=!0),i.animateOnInit=!1,i.animation=this.animationEnabled(),i.animatedValue=this.animationEnabled(),i.animationRule="linear",i.animationDuration=(e.paths?.gaugePath?.sampleTime??500)-50;let o=Ce(e.color,t),r=_g(o.dim),s=_g(Ce("contrast",t).dim);i.colorBarProgress=o.color,i.colorBorderMiddle=r,i.colorBorderMiddleEnd=r,i.colorNeedle=o.color,i.colorNeedleEnd=o.color,i.colorTitle=s,i.colorUnits=s,i.colorValueText=o.color,i.colorMinorTicks=s,i.colorNumbers=e.gauge?.compassUseNumbers?[t.port,s,s,r,s,s,r,s,s,r,s,s,t.port]:[t.port,r,r,r,r,r,r,r,t.port],i.colorMajorTicks=e.gauge?.compassUseNumbers?[t.port,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.port]:[t.port,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.contrast,t.port],i.colorPlate=i.colorPlateEnd=i.colorBorderInner=i.colorBorderInnerEnd=t.cardColor,i.colorBar=t.background,i.colorBarStroke="",i.colorValueBoxBackground=t.background,i.colorNeedleShadowUp="",i.colorNeedleShadowDown="",i.colorNeedleCircleInner=i.colorPlate,i.colorNeedleCircleInnerEnd=i.colorPlate,i.colorNeedleCircleOuter=i.colorPlate,i.colorNeedleCircleOuterEnd=i.colorPlate}setCanvasSize(){let e=this.gauge()?.nativeElement;if(!e)return;let t=e.getBoundingClientRect(),i={height:t.height,width:t.width};try{this.ngGauge()?.update(i)}catch(o){}}ngAfterViewInit(){this.viewReady.set(!0),this.setCanvasSize();try{this.ngGauge()?.update(this.gaugeOptions)}catch(e){}}onResized(e){let t={height:e.contentRect.height,width:e.contentRect.width};try{this.ngGauge()?.update(t)}catch(i){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-gauge-ng-compass"]],viewQuery:function(t,i){t&1&&_e(i.ngGauge,wg,5)(i.gauge,wg,5,nt),t&2&&Me(2)},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:1,vars:1,consts:[["compassGauge",""],["kipResizeObserver","",3,"options","value"],["kipResizeObserver","",3,"resizeChange","options","value"]],template:function(t,i){t&1&&I(0,PS,2,4,"radial-gauge",1),t&2&&P(i.shouldRenderGauge()?0:-1)},dependencies:[oi,No,fl],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%} radial-gauge{display:block;position:relative;width:100%;min-width:8px;height:100%;overflow:clip} radial-gauge>canvas{display:block;position:absolute;height:100%;width:100%;left:50%;top:50%;transform:translate(-50%,-50%);padding:10px}"],changeDetection:0})}return n})();var NS=["plainIframe"],Tg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);_dashboard=A(Tt);_sanitizer=A(oo);settings=A(Ht);static DEFAULT_CONFIG={};iframe=he.required("plainIframe");widgetUrl=null;displayTransparentOverlay=w("block");constructor(){let e=new URL("/signalk-anchoralarm-plugin/",window.location.origin);this.widgetUrl=this.toSafeResourceUrl(e),W(()=>{let t=this.runtime.options(),i=this._dashboard.isDashboardStatic();t&&z(()=>{i?this.displayTransparentOverlay.set("none"):this.displayTransparentOverlay.set("block")})}),window.addEventListener("message",this.handleIframeGesture)}toSafeResourceUrl(e){return e.origin!==window.location.origin||!e.pathname.startsWith("/signalk-anchoralarm-plugin/")?null:this._sanitizer.bypassSecurityTrustResourceUrl(e.toString())}ngAfterViewInit(){if(this.iframe()){this.iframe().nativeElement.onload=()=>this.injectSwipeScript();try{let e=this.iframe().nativeElement.contentDocument;e&&(e.readyState==="complete"||e.readyState==="interactive")&&this.injectSwipeScript()}catch(e){}}}handleIframeGesture=e=>{if(!e.data)return;let t=e.data?.eventData?.instanceId||e.data?.keyEventData?.instanceId;if(!(!t||t!==this.id())){if(e.data.gesture)switch(e.data.gesture){case"swipeup":this._dashboard.navigateToPreviousDashboard();break;case"swipedown":this._dashboard.navigateToNextDashboard();break;case"swipeleft":{let i=new Event("openLeftSidenav",{bubbles:!0,cancelable:!0});window.document.dispatchEvent(i);break}case"swiperight":{let i=new Event("openRightSidenav",{bubbles:!0,cancelable:!0});window.document.dispatchEvent(i);break}default:break}if(e.data.type==="keydown"&&e.data.keyEventData){let{key:i,ctrlKey:o,shiftKey:r}=e.data.keyEventData,s=new KeyboardEvent("keydown",{key:i,ctrlKey:o,shiftKey:r,bubbles:!0,cancelable:!0});document.dispatchEvent(s)}}};injectSwipeScript(){let e=this.iframe().nativeElement.contentWindow,t=this.iframe().nativeElement.contentDocument;if(!t||!e){console.error("[WidgetIframe] Iframe contentDocument or contentWindow is undefined. Possible cross-origin issue or iframe not fully loaded.");return}try{let i=`kip-gesture-inject-${this.id()}`;if(t.getElementById(i))return;let o=xo({instanceId:this.id()}),r=t.createElement("script");r.id=i,r.textContent=o,t.body.appendChild(r)}catch(i){console.warn("[WidgetIframe] Failed to inject swipe script into iframe:",i)}}ngOnDestroy(){window.removeEventListener("message",this.handleIframeGesture),this.iframe()&&(this.iframe().nativeElement.onload=null);try{let e=this.iframe()?.nativeElement.contentDocument;if(e){let t=`kip-gesture-inject-${this.id()}`,i=e.getElementById(t);i&&i.parentNode&&i.parentNode.removeChild(i)}}catch(e){}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-anchor-alarm"]],viewQuery:function(t,i){t&1&&_e(i.iframe,NS,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:3,vars:3,consts:[["plainIframe",""],["width","100%","height","100%","frameborder","0",1,"widgetIframe",3,"src"],[1,"widgetOverlay"]],template:function(t,i){t&1&&ee(0,"iframe",1,0)(2,"div",2),t&2&&(ji("src",i.widgetUrl,Sa),f(2),Te("display",i.displayTransparentOverlay()))},styles:["[_nghost-%COMP%]{overflow:hidden}.widgetIframe[_ngcontent-%COMP%]{background-color:#fff;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent}"],changeDetection:0})}return n})();var OS=["canvasMainRef"],kg=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);streams=A(Be);static DEFAULT_CONFIG={displayName:"Time Label",filterSelfPaths:!0,paths:{gaugePath:{description:"Date / Time",path:null,source:null,pathType:"Date",isPathConfigurable:!0,sampleTime:1e3}},dateFormat:"dd/MM/yyyy HH:mm:ss",dateTimezone:"Atlantic/Azores",color:"contrast",enableTimeout:!1,dataTimeout:5};canvasMainRef=he.required("canvasMainRef");canvasElement;canvasCtx;titleBitmap=null;titleBitmapText=null;titleBitmapColor=null;canvas=A(St);cssWidth=0;cssHeight=0;dataValue=w(null);_timeZoneGTM="";isDestroyed=!1;labelColor=w(void 0);valueColor=void 0;maxTextWidth=0;maxTextHeight=0;displayName=L(()=>this.runtime.options()?.displayName);dateFormat=L(()=>this.runtime.options()?.dateFormat);dateTimezone=L(()=>this.runtime.options()?.dateTimezone);constructor(){W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{this.applyColors(),e.paths?.gaugePath?.path&&(this._timeZoneGTM=this.getGMTOffset(this.dateTimezone()),this.streams.observe("gaugePath",o=>{this.dataValue.set(o?.data?.value??null),this.drawWidget()}))})}),W(()=>{let e=this.theme(),t=this.runtime.options();!e||!t||z(()=>{this.applyColors(),this.drawWidget()})})}ngAfterViewInit(){this.canvasElement=this.canvasMainRef().nativeElement,this.canvasCtx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:!0,onResize:(e,t)=>{this.cssWidth=e,this.cssHeight=t,this.maxTextWidth=Math.floor(this.cssWidth*.85),this.maxTextHeight=Math.floor(this.cssHeight*.7),this.drawWidget()}}),!this.isDestroyed&&(this.cssHeight=Math.floor(this.canvasElement.getBoundingClientRect().height),this.cssWidth=Math.floor(this.canvasElement.getBoundingClientRect().width),this.maxTextWidth=Math.floor(this.canvasElement.width*.85),this.maxTextHeight=Math.floor(this.canvasElement.height*.7),this.applyColors(),this.drawWidget())}getGMTOffset(e){try{if(e==="System Timezone -")return"";let o=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"short"}).formatToParts(new Date).find(r=>r.type==="timeZoneName");return o?o.value:"GMT"}catch(t){return console.error(`Error getting GMT offset for timezone "${e}":`,t),"GMT"}}applyColors(){let e=this.runtime.options(),t=this.theme();!e||!t||(this.labelColor.set(Ce(e.color,t).dim),this.valueColor=Ce(e.color,t).color)}ngOnDestroy(){this.isDestroyed=!0;try{this.canvas.unregisterCanvas(this.canvasElement)}catch(e){}}drawWidget(){if(!this.canvasCtx)return;let e=this.labelColor();(!this.titleBitmap||this.titleBitmap.width!==this.canvasElement.width||this.titleBitmap.height!==this.canvasElement.height||this.titleBitmapText!==`${this.displayName()}-${this.runtime.options().color}`||this.titleBitmapColor!==e)&&(this.titleBitmap=this.canvas.createTitleBitmap(this.displayName(),e,"normal",this.cssWidth,this.cssHeight),this.titleBitmapText=`${this.displayName()}-${this.runtime.options().color}`,this.titleBitmapColor=e),this.canvas.clearCanvas(this.canvasCtx,this.cssWidth,this.cssHeight),this.titleBitmap&&this.titleBitmap.width>0&&this.titleBitmap.height>0&&this.canvasCtx.drawImage(this.titleBitmap,0,0,this.cssWidth,this.cssHeight);let t,i=this.dataValue();if(!i||isNaN(Date.parse(i)))t="--";else try{t=Bc(i,this.dateFormat(),"en-US",this._timeZoneGTM)}catch(o){t=o,console.log("[Date Time Widget]: "+o)}this.canvas.drawText(this.canvasCtx,t,Math.floor(this.cssWidth/2),Math.floor(this.cssHeight/2*1.15),this.maxTextWidth,this.maxTextHeight,"bold",this.valueColor)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-datetime"]],viewQuery:function(t,i){t&1&&_e(i.canvasMainRef,OS,5),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:0,consts:[["canvasMainRef",""],[1,"date-canvas"]],template:function(t,i){t&1&&ee(0,"canvas",1,0)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;overflow:hidden}.date-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;min-height:1px;display:block}"],changeDetection:0})}return n})();var Dg={modes:{point(n,a){return bl(n,a,{intersect:!0})},nearest(n,a,e){return WS(n,a,e)},x(n,a,e){return bl(n,a,{intersect:e.intersect,axis:"x"})},y(n,a,e){return bl(n,a,{intersect:e.intersect,axis:"y"})}}};function $d(n,a,e){return(Dg.modes[e.mode]||Dg.modes.nearest)(n,a,e)}function VS(n,a,e){return e!=="x"&&e!=="y"?n.inRange(a.x,a.y,"x",!0)||n.inRange(a.x,a.y,"y",!0):n.inRange(a.x,a.y,e,!0)}function LS(n,a,e){return e==="x"?{x:n.x,y:a.y}:e==="y"?{x:a.x,y:n.y}:a}function bl(n,a,e){return n.filter(t=>e.intersect?t.inRange(a.x,a.y):VS(t,a,e.axis))}function WS(n,a,e){let t=Number.POSITIVE_INFINITY;return bl(n,a,e).reduce((i,o)=>{let r=o.getCenterPoint(),s=LS(a,r,e.axis),l=nr(a,s);return l<t?(i=[o],t=l):l===t&&i.push(o),i},[]).sort((i,o)=>i._index-o._index).slice(0,1)}function Ya(n,a,e){let t=Math.cos(e),i=Math.sin(e),o=a.x,r=a.y;return{x:o+t*(n.x-o)-i*(n.y-r),y:r+i*(n.x-o)+t*(n.y-r)}}var FS=(n,a)=>a>n||n.length>a.length&&n.slice(0,a.length)===a,Ha=.001,Al=(n,a,e)=>Math.min(e,Math.max(a,n)),Kg=(n,a)=>n.value>=n.start-a&&n.value<=n.end+a;function BS(n,a,e){for(let t of Object.keys(n))n[t]=Al(n[t],a,e);return n}function GS(n,a,e,t){return!n||!a||e<=0?!1:Math.pow(n.x-a.x,2)+Math.pow(n.y-a.y,2)<=Math.pow(e+t,2)}function Xg(n,{x:a,y:e,x2:t,y2:i},o,{borderWidth:r,hitTolerance:s}){let l=(r+s)/2,m=n.x>=a-l-Ha&&n.x<=t+l+Ha,h=n.y>=e-l-Ha&&n.y<=i+l+Ha;return o==="x"?m:(o==="y"||m)&&h}function Zg(n,{rect:a,center:e},t,{rotation:i,borderWidth:o,hitTolerance:r}){let s=Ya(n,e,Ji(-i));return Xg(s,a,t,{borderWidth:o,hitTolerance:r})}function Ka(n,a){let{centerX:e,centerY:t}=n.getProps(["centerX","centerY"],a);return{x:e,y:t}}function zS(n,a,e,t=!0){let i=e.split("."),o=0;for(let r of a.split(".")){let s=i[o++];if(parseInt(r,10)<parseInt(s,10))break;if(FS(s,r)){if(t)throw new Error(`${n} v${e} is not supported. v${a} or newer is required.`);return!1}}return!0}var Qg=n=>typeof n=="string"&&n.endsWith("%"),Jg=n=>parseFloat(n)/100,ef=n=>Al(Jg(n),0,1),Er=(n,a)=>({x:n,y:a,x2:n,y2:a,width:0,height:0}),US={box:n=>Er(n.centerX,n.centerY),doughnutLabel:n=>Er(n.centerX,n.centerY),ellipse:n=>({centerX:n.centerX,centerY:n.centerX,radius:0,width:0,height:0}),label:n=>Er(n.centerX,n.centerY),line:n=>Er(n.x,n.y),point:n=>({centerX:n.centerX,centerY:n.centerY,radius:0,width:0,height:0}),polygon:n=>Er(n.centerX,n.centerY)};function jd(n,a){return a==="start"?0:a==="end"?n:Qg(a)?ef(a)*n:n/2}function va(n,a,e=!0){return typeof a=="number"?a:Qg(a)?(e?ef(a):Jg(a))*n:n}function HS(n,a){let{x:e,width:t}=n,i=a.textAlign;return i==="center"?e+t/2:i==="end"||i==="right"?e+t:e}function tf(n,a,{borderWidth:e,position:t,xAdjust:i,yAdjust:o},r){let s=ea(r),l=a.width+(s?r.width:0)+e,m=a.height+(s?r.height:0)+e,h=Yd(t),v=Eg(n.x,l,i,h.x),y=Eg(n.y,m,o,h.y);return{x:v,y,x2:v+l,y2:y+m,width:l,height:m,centerX:v+l/2,centerY:y+m/2}}function Yd(n,a="center"){return ea(n)?{x:Rn(n.x,a),y:Rn(n.y,a)}:(n=Rn(n,a),{x:n,y:n})}var nf=(n,a)=>n&&n.autoFit&&a<1;function af(n,a){let e=n.font,t=Zi(e)?e:[e];return nf(n,a)?t.map(function(i){let o=rr(i);return o.size=Math.floor(i.size*a),o.lineHeight=i.lineHeight,rr(o)}):t.map(i=>rr(i))}function of(n){return n&&(Qi(n.xValue)||Qi(n.yValue))}function Eg(n,a,e=0,t){return n-jd(a,t)+e}function Fo(n,a,e){let t=e.init;if(t){if(t===!0)return sf(a,e)}else return;return qS(n,a,e)}function rf(n,a,e){let t=!1;return a.forEach(i=>{ta(n[i])?(t=!0,e[i]=n[i]):Qi(e[i])&&delete e[i]}),t}function sf(n,a){let e=a.type||"line";return US[e](n)}function qS(n,a,e){let t=bn(e.init,[{chart:n,properties:a,options:e}]);if(t===!0)return sf(a,e);if(ea(t))return t}var Wd=new Map,$S=n=>isNaN(n)||n<=0,jS=n=>n.reduce(function(a,e){return a+=e.string,a},"");function Cl(n){if(n&&typeof n=="object"){let a=n.toString();return a==="[object HTMLImageElement]"||a==="[object HTMLCanvasElement]"}}function xl(n,{x:a,y:e},t){t&&(n.translate(a,e),n.rotate(Ji(t)),n.translate(-a,-e))}function Fn(n,a){if(a&&a.borderWidth)return n.lineCap=a.borderCapStyle||"butt",n.setLineDash(a.borderDash),n.lineDashOffset=a.borderDashOffset,n.lineJoin=a.borderJoinStyle||"miter",n.lineWidth=a.borderWidth,n.strokeStyle=a.borderColor,!0}function Bo(n,a){n.shadowColor=a.backgroundShadowColor,n.shadowBlur=a.shadowBlur,n.shadowOffsetX=a.shadowOffsetX,n.shadowOffsetY=a.shadowOffsetY}function Sl(n,a){let e=a.content;if(Cl(e))return{width:va(e.width,a.width),height:va(e.height,a.height)};let t=af(a),i=a.textStrokeWidth,o=Zi(e)?e:[e],r=o.join()+jS(t)+i+(n._measureText?"-spriting":"");return Wd.has(r)||Wd.set(r,ZS(n,o,t,i)),Wd.get(r)}function lf(n,a,e){let{x:t,y:i,width:o,height:r}=a;n.save(),Bo(n,e);let s=Fn(n,e);n.fillStyle=e.backgroundColor,n.beginPath(),$l(n,{x:t,y:i,w:o,h:r,radius:BS(jl(e.borderRadius),0,Math.min(o,r)/2)}),n.closePath(),n.fill(),s&&(n.shadowColor=e.borderShadowColor,n.stroke()),n.restore()}function df(n,a,e,t){let i=e.content;if(Cl(i)){n.save(),n.globalAlpha=ew(e.opacity,i.style.opacity),n.drawImage(i,a.x,a.y,a.width,a.height),n.restore();return}let o=Zi(i)?i:[i],r=af(e,t),s=e.color,l=Zi(s)?s:[s],m=HS(a,e),h=a.y+e.textStrokeWidth/2;n.save(),n.textBaseline="middle",n.textAlign=e.textAlign,YS(n,e)&&QS(n,{x:m,y:h},o,r),JS(n,{x:m,y:h},o,{fonts:r,colors:l}),n.restore()}function YS(n,a){if(a.textStrokeWidth>0)return n.lineJoin="round",n.miterLimit=2,n.lineWidth=a.textStrokeWidth,n.strokeStyle=a.textStrokeColor,!0}function KS(n,a,e,t){let{radius:i,options:o}=a,r=o.pointStyle,s=o.rotation,l=(s||0)*vs;if(Cl(r)){n.save(),n.translate(e,t),n.rotate(l),n.drawImage(r,-r.width/2,-r.height/2,r.width,r.height),n.restore();return}$S(i)||XS(n,{x:e,y:t,radius:i,rotation:s,style:r,rad:l})}function XS(n,{x:a,y:e,radius:t,rotation:i,style:o,rad:r}){let s,l,m,h;switch(n.beginPath(),o){default:n.arc(a,e,t,0,fs),n.closePath();break;case"triangle":n.moveTo(a+Math.sin(r)*t,e-Math.cos(r)*t),r+=bs,n.lineTo(a+Math.sin(r)*t,e-Math.cos(r)*t),r+=bs,n.lineTo(a+Math.sin(r)*t,e-Math.cos(r)*t),n.closePath();break;case"rectRounded":h=t*.516,m=t-h,s=Math.cos(r+Ea)*m,l=Math.sin(r+Ea)*m,n.arc(a-s,e-l,h,r-Ci,r-ho),n.arc(a+l,e-s,h,r-ho,r),n.arc(a+s,e+l,h,r,r+ho),n.arc(a-l,e+s,h,r+ho,r+Ci),n.closePath();break;case"rect":if(!i){m=Math.SQRT1_2*t,n.rect(a-m,e-m,2*m,2*m);break}r+=Ea;case"rectRot":s=Math.cos(r)*t,l=Math.sin(r)*t,n.moveTo(a-s,e-l),n.lineTo(a+l,e-s),n.lineTo(a+s,e+l),n.lineTo(a-l,e+s),n.closePath();break;case"crossRot":r+=Ea;case"cross":s=Math.cos(r)*t,l=Math.sin(r)*t,n.moveTo(a-s,e-l),n.lineTo(a+s,e+l),n.moveTo(a+l,e-s),n.lineTo(a-l,e+s);break;case"star":s=Math.cos(r)*t,l=Math.sin(r)*t,n.moveTo(a-s,e-l),n.lineTo(a+s,e+l),n.moveTo(a+l,e-s),n.lineTo(a-l,e+s),r+=Ea,s=Math.cos(r)*t,l=Math.sin(r)*t,n.moveTo(a-s,e-l),n.lineTo(a+s,e+l),n.moveTo(a+l,e-s),n.lineTo(a-l,e+s);break;case"line":s=Math.cos(r)*t,l=Math.sin(r)*t,n.moveTo(a-s,e-l),n.lineTo(a+s,e+l);break;case"dash":n.moveTo(a,e),n.lineTo(a+Math.cos(r)*t,e+Math.sin(r)*t);break}n.fill()}function ZS(n,a,e,t){n.save();let i=a.length,o=0,r=t;for(let s=0;s<i;s++){let l=e[Math.min(s,e.length-1)];n.font=l.string;let m=a[s];o=Math.max(o,n.measureText(m).width+t),r+=l.lineHeight}return n.restore(),{width:o,height:r}}function QS(n,{x:a,y:e},t,i){n.beginPath();let o=0;t.forEach(function(r,s){let l=i[Math.min(s,i.length-1)],m=l.lineHeight;n.font=l.string,n.strokeText(r,a,e+m/2+o),o+=m}),n.stroke()}function JS(n,{x:a,y:e},t,{fonts:i,colors:o}){let r=0;t.forEach(function(s,l){let m=o[Math.min(l,o.length-1)],h=i[Math.min(l,i.length-1)],v=h.lineHeight;n.beginPath(),n.font=h.string,n.fillStyle=m,n.fillText(s,a,e+v/2+r),r+=v,n.fill()})}function ew(n,a){let e=po(n)?n:a;return po(e)?Al(e,0,1):1}var cf=["left","bottom","top","right"];function tw(n,a){let{pointX:e,pointY:t,options:i}=a,o=i.callout,r=o&&o.display&&rw(a,o);if(!r||lw(a,o,r))return;if(n.save(),n.beginPath(),!Fn(n,o))return n.restore();let{separatorStart:l,separatorEnd:m}=iw(a,r),{sideStart:h,sideEnd:v}=aw(a,r,l);(o.margin>0||i.borderWidth===0)&&(n.moveTo(l.x,l.y),n.lineTo(m.x,m.y)),n.moveTo(h.x,h.y),n.lineTo(v.x,v.y);let y=Ya({x:e,y:t},a.getCenterPoint(),Ji(-a.rotation));n.lineTo(y.x,y.y),n.stroke(),n.restore()}function iw(n,a){let{x:e,y:t,x2:i,y2:o}=n,r=nw(n,a),s,l;return a==="left"||a==="right"?(s={x:e+r,y:t},l={x:s.x,y:o}):(s={x:e,y:t+r},l={x:i,y:s.y}),{separatorStart:s,separatorEnd:l}}function nw(n,a){let{width:e,height:t,options:i}=n,o=i.callout.margin+i.borderWidth/2;return a==="right"?e+o:a==="bottom"?t+o:-o}function aw(n,a,e){let{y:t,width:i,height:o,options:r}=n,s=r.callout.start,l=ow(a,r.callout),m,h;return a==="left"||a==="right"?(m={x:e.x,y:t+va(o,s)},h={x:m.x+l,y:m.y}):(m={x:e.x+va(i,s),y:e.y},h={x:m.x,y:m.y+l}),{sideStart:m,sideEnd:h}}function ow(n,a){let e=a.side;return n==="left"||n==="top"?-e:e}function rw(n,a){let e=a.position;return cf.includes(e)?e:sw(n,a)}function sw(n,a){let{x:e,y:t,x2:i,y2:o,width:r,height:s,pointX:l,pointY:m,centerX:h,centerY:v,rotation:y}=n,C={x:h,y:v},S=a.start,_=va(r,S),F=va(s,S),E=[e,e+_,e+_,i],N=[t+F,o,t,o],U=[];for(let j=0;j<4;j++){let B=Ya({x:E[j],y:N[j]},C,Ji(y));U.push({position:cf[j],distance:nr(B,{x:l,y:m})})}return U.sort((j,B)=>j.distance-B.distance)[0].position}function lw(n,a,e){let{pointX:t,pointY:i}=n,o=a.margin,r=t,s=i;return e==="left"?r+=o:e==="right"?r-=o:e==="top"?s+=o:e==="bottom"&&(s-=o),n.inRange(r,s)}var Ig={xScaleID:{min:"xMin",max:"xMax",start:"left",end:"right",startProp:"x",endProp:"x2"},yScaleID:{min:"yMin",max:"yMax",start:"bottom",end:"top",startProp:"y",endProp:"y2"}};function Oo(n,a,e){return a=typeof a=="number"?a:n.parse(a),Da(a)?n.getPixelForValue(a):e}function qa(n,a,e){let t=a[e];if(t||e==="scaleID")return t;let i=e.charAt(0),o=Object.values(n).filter(r=>r.axis&&r.axis===i);return o.length?o[0].id:i}function uf(n,a){if(n){let e=n.options.reverse,t=Oo(n,a.min,e?a.end:a.start),i=Oo(n,a.max,e?a.start:a.end);return{start:t,end:i}}}function mf(n,a){let{chartArea:e,scales:t}=n,i=t[qa(t,a,"xScaleID")],o=t[qa(t,a,"yScaleID")],r=e.width/2,s=e.height/2;return i&&(r=Oo(i,a.xValue,i.left+i.width/2)),o&&(s=Oo(o,a.yValue,o.top+o.height/2)),{x:r,y:s}}function Kd(n,a){let e=n.scales,t=e[qa(e,a,"xScaleID")],i=e[qa(e,a,"yScaleID")];if(!t&&!i)return{};let{left:o,right:r}=t||n.chartArea,{top:s,bottom:l}=i||n.chartArea,m=Pg(t,{min:a.xMin,max:a.xMax,start:o,end:r});o=m.start,r=m.end;let h=Pg(i,{min:a.yMin,max:a.yMax,start:l,end:s});return s=h.start,l=h.end,{x:o,y:s,x2:r,y2:l,width:r-o,height:l-s,centerX:o+(r-o)/2,centerY:s+(l-s)/2}}function hf(n,a){if(!of(a)){let e=Kd(n,a),t=a.radius;(!t||isNaN(t))&&(t=Math.min(e.width,e.height)/2,a.radius=t);let i=t*2,o=e.centerX+a.xAdjust,r=e.centerY+a.yAdjust;return{x:o-t,y:r-t,x2:o+t,y2:r+t,centerX:o,centerY:r,width:i,height:i,radius:t}}return cw(n,a)}function dw(n,a){let{scales:e,chartArea:t}=n,i=e[a.scaleID],o={x:t.left,y:t.top,x2:t.right,y2:t.bottom};return i?uw(i,o,a):mw(e,o,a),o}function pf(n,a){let e=Kd(n,a);return e.initProperties=Fo(n,e,a),e.elements=[{type:"label",optionScope:"label",properties:gw(n,e,a),initProperties:e.initProperties}],e}function cw(n,a){let e=mf(n,a),t=a.radius*2;return{x:e.x-a.radius+a.xAdjust,y:e.y-a.radius+a.yAdjust,x2:e.x+a.radius+a.xAdjust,y2:e.y+a.radius+a.yAdjust,centerX:e.x+a.xAdjust,centerY:e.y+a.yAdjust,radius:a.radius,width:t,height:t}}function Pg(n,a){let e=uf(n,a)||a;return{start:Math.min(e.start,e.end),end:Math.max(e.start,e.end)}}function uw(n,a,e){let t=Oo(n,e.value,NaN),i=Oo(n,e.endValue,t);n.isHorizontal()?(a.x=t,a.x2=i):(a.y=t,a.y2=i)}function mw(n,a,e){for(let t of Object.keys(Ig)){let i=n[qa(n,e,t)];if(i){let{min:o,max:r,start:s,end:l,startProp:m,endProp:h}=Ig[t],v=uf(i,{min:e[o],max:e[r],start:i[s],end:i[l]});a[m]=v.start,a[h]=v.end}}}function hw({properties:n,options:a},e,t,i){let{x:o,x2:r,width:s}=n;return gf({start:o,end:r,size:s,borderWidth:a.borderWidth},{position:t.x,padding:{start:i.left,end:i.right},adjust:a.label.xAdjust,size:e.width})}function pw({properties:n,options:a},e,t,i){let{y:o,y2:r,height:s}=n;return gf({start:o,end:r,size:s,borderWidth:a.borderWidth},{position:t.y,padding:{start:i.top,end:i.bottom},adjust:a.label.yAdjust,size:e.height})}function gf(n,a){let{start:e,end:t,borderWidth:i}=n,{position:o,padding:{start:r,end:s},adjust:l}=a,m=t-i-e-r-s-a.size;return e+i/2+l+jd(m,o)}function gw(n,a,e){let t=e.label;t.backgroundColor="transparent",t.callout.display=!1;let i=Yd(t.position),o=vo(t.padding),r=Sl(n.ctx,t),s=hw({properties:a,options:e},r,i,o),l=pw({properties:a,options:e},r,i,o),m=r.width+o.width,h=r.height+o.height;return{x:s,y:l,x2:s+m,y2:l+h,width:m,height:h,centerX:s+m/2,centerY:l+h/2,rotation:t.rotation}}var Fd=["enter","leave"],Xd=Fd.concat("click");function fw(n,a,e){a.listened=rf(e,Xd,a.listeners),a.moveListened=!1,Fd.forEach(t=>{ta(e[t])&&(a.moveListened=!0)}),(!a.listened||!a.moveListened)&&a.annotations.forEach(t=>{!a.listened&&ta(t.click)&&(a.listened=!0),a.moveListened||Fd.forEach(i=>{ta(t[i])&&(a.listened=!0,a.moveListened=!0)})})}function vw(n,a,e){if(n.listened)switch(a.type){case"mousemove":case"mouseout":return bw(n,a,e);case"click":return yw(n,a,e)}}function bw(n,a,e){if(!n.moveListened)return;let t;a.type==="mousemove"?t=$d(n.visibleElements,a,e.interaction):t=[];let i=n.hovered;n.hovered=t;let o={state:n,event:a},r=Rg(o,"leave",i,t);return Rg(o,"enter",t,i)||r}function Rg({state:n,event:a},e,t,i){let o;for(let r of t)i.indexOf(r)<0&&(o=ff(r.options[e]||n.listeners[e],r,a)||o);return o}function yw(n,a,e){let t=n.listeners,i=$d(n.visibleElements,a,e.interaction),o;for(let r of i)o=ff(r.options.click||t.click,r,a)||o;return o}function ff(n,a,e){return bn(n,[a.$context,e])===!0}var yl=["afterDraw","beforeDraw"];function Aw(n,a,e){let t=a.visibleElements;a.hooked=rf(e,yl,a.hooks),a.hooked||t.forEach(i=>{a.hooked||yl.forEach(o=>{ta(i.options[o])&&(a.hooked=!0)})})}function Ng(n,a,e){if(n.hooked){let t=a.options[e]||n.hooks[e];return bn(t,[a.$context])}}function Cw(n,a,e){let t=Mw(n.scales,a,e),i=Og(a,t,"min","suggestedMin");i=Og(a,t,"max","suggestedMax")||i,i&&ta(a.handleTickRangeOptions)&&a.handleTickRangeOptions()}function xw(n,a){for(let e of n)ww(e,a)}function Og(n,a,e,t){if(Da(a[e])&&!Sw(n.options,e,t)){let i=n[e]!==a[e];return n[e]=a[e],i}}function Sw(n,a,e){return Qi(n[a])||Qi(n[e])}function ww(n,a){for(let e of["scaleID","xScaleID","yScaleID"]){let t=qa(a,n,e);t&&!a[t]&&_w(n,e)&&console.warn(`No scale found with id '${t}' for annotation '${n.id}'`)}}function _w(n,a){if(a==="scaleID")return!0;let e=a.charAt(0);for(let t of["Min","Max","Value"])if(Qi(n[e+t]))return!0;return!1}function Mw(n,a,e){let t=a.axis,i=a.id,o=t+"ScaleID",r={min:Rn(a.min,Number.NEGATIVE_INFINITY),max:Rn(a.max,Number.POSITIVE_INFINITY)};for(let s of e)s.scaleID===i?Vg(s,a,["value","endValue"],r):qa(n,s,o)===i&&Vg(s,a,[t+"Min",t+"Max",t+"Value"],r);return r}function Vg(n,a,e,t){for(let i of e){let o=n[i];if(Qi(o)){let r=a.parse(o);t.min=Math.min(t.min,r),t.max=Math.max(t.max,r)}}}var ba=class extends na{inRange(a,e,t,i){let{x:o,y:r}=Ya({x:a,y:e},this.getCenterPoint(i),Ji(-this.options.rotation));return Xg({x:o,y:r},this.getProps(["x","y","x2","y2"],i),t,this.options)}getCenterPoint(a){return Ka(this,a)}draw(a){a.save(),xl(a,this.getCenterPoint(),this.options.rotation),lf(a,this,this.options),a.restore()}get label(){return this.elements&&this.elements[0]}resolveElementProperties(a,e){return pf(a,e)}};ba.id="boxAnnotation";ba.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:0,borderShadowColor:"transparent",borderWidth:1,display:!0,init:void 0,hitTolerance:0,label:{backgroundColor:"transparent",borderWidth:0,callout:{display:!1},color:"black",content:null,display:!1,drawTime:void 0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:"bold"},height:void 0,hitTolerance:void 0,opacity:void 0,padding:6,position:"center",rotation:void 0,textAlign:"start",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,yAdjust:0,z:void 0},rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xMax:void 0,xMin:void 0,xScaleID:void 0,yMax:void 0,yMin:void 0,yScaleID:void 0,z:0};ba.defaultRoutes={borderColor:"color",backgroundColor:"color"};ba.descriptors={label:{_fallback:!0}};var Vo=class extends na{inRange(a,e,t,i){return Zg({x:a,y:e},{rect:this.getProps(["x","y","x2","y2"],i),center:this.getCenterPoint(i)},t,{rotation:this.rotation,borderWidth:0,hitTolerance:this.options.hitTolerance})}getCenterPoint(a){return Ka(this,a)}draw(a){let e=this.options;!e.display||!e.content||(Pw(a,this),a.save(),xl(a,this.getCenterPoint(),this.rotation),df(a,this,e,this._fitRatio),a.restore())}resolveElementProperties(a,e){let t=Tw(a,e);if(!t)return{};let{controllerMeta:i,point:o,radius:r}=Dw(a,e,t),s=Sl(a.ctx,e),l=Ew(s,r);nf(e,l)&&(s={width:s.width*l,height:s.height*l});let{position:m,xAdjust:h,yAdjust:v}=e,y=tf(o,s,{borderWidth:0,position:m,xAdjust:h,yAdjust:v});return ge(Z(Z({initProperties:Fo(a,y,e)},y),i),{rotation:e.rotation,_fitRatio:l})}};Vo.id="doughnutLabelAnnotation";Vo.defaults={autoFit:!0,autoHide:!0,backgroundColor:"transparent",backgroundShadowColor:"transparent",borderColor:"transparent",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderShadowColor:"transparent",borderWidth:0,color:"black",content:null,display:!0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:void 0},height:void 0,hitTolerance:0,init:void 0,opacity:void 0,position:"center",rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,spacing:1,textAlign:"center",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,yAdjust:0};Vo.defaultRoutes={};function Tw(n,a){return n.getSortedVisibleDatasetMetas().reduce(function(e,t){let i=t.controller;return i instanceof Yu&&kw(n,a,t.data)&&(!e||i.innerRadius<e.controller.innerRadius)&&i.options.circumference>=90?t:e},void 0)}function kw(n,a,e){if(!a.autoHide)return!0;for(let t=0;t<e.length;t++)if(!e[t].hidden&&n.getDataVisibility(t))return!0}function Dw({chartArea:n},a,e){let{left:t,top:i,right:o,bottom:r}=n,{innerRadius:s,offsetX:l,offsetY:m}=e.controller,h=(t+o)/2+l,v=(i+r)/2+m,y={left:Math.max(h-s,t),right:Math.min(h+s,o),top:Math.max(v-s,i),bottom:Math.min(v+s,r)},C={x:(y.left+y.right)/2,y:(y.top+y.bottom)/2},S=a.spacing+a.borderWidth/2,_=s-S,F=C.y>v,E=F?i+S:r-S,N=Iw(E,h,v,_);return{controllerMeta:Z({_centerX:h,_centerY:v,_radius:_,_counterclockwise:F},N),point:C,radius:Math.min(s,Math.min(y.right-y.left,y.bottom-y.top)/2)}}function Ew({width:n,height:a},e){let t=Math.sqrt(Math.pow(n,2)+Math.pow(a,2));return e*2/t}function Iw(n,a,e,t){let i=Math.pow(e-n,2),o=Math.pow(t,2),r=a*-2,s=Math.pow(a,2)+i-o,l=Math.pow(r,2)-4*s;if(l<=0)return{_startAngle:0,_endAngle:fs};let m=(-r-Math.sqrt(l))/2,h=(-r+Math.sqrt(l))/2;return{_startAngle:ys({x:a,y:e},{x:m,y:n}).angle,_endAngle:ys({x:a,y:e},{x:h,y:n}).angle}}function Pw(n,a){let{_centerX:e,_centerY:t,_radius:i,_startAngle:o,_endAngle:r,_counterclockwise:s,options:l}=a;n.save();let m=Fn(n,l);n.fillStyle=l.backgroundColor,n.beginPath(),n.arc(e,t,i,o,r,s),n.closePath(),n.fill(),m&&n.stroke(),n.restore()}var $a=class extends na{inRange(a,e,t,i){return Zg({x:a,y:e},{rect:this.getProps(["x","y","x2","y2"],i),center:this.getCenterPoint(i)},t,{rotation:this.rotation,borderWidth:this.options.borderWidth,hitTolerance:this.options.hitTolerance})}getCenterPoint(a){return Ka(this,a)}draw(a){let e=this.options,t=!Qi(this._visible)||this._visible;!e.display||!e.content||!t||(a.save(),xl(a,this.getCenterPoint(),this.rotation),tw(a,this),lf(a,this,e),df(a,Rw(this),e),a.restore())}resolveElementProperties(a,e){let t;if(of(e))t=mf(a,e);else{let{centerX:s,centerY:l}=Kd(a,e);t={x:s,y:l}}let i=vo(e.padding),o=Sl(a.ctx,e),r=tf(t,o,e,i);return ge(Z({initProperties:Fo(a,r,e),pointX:t.x,pointY:t.y},r),{rotation:e.rotation})}};$a.id="labelAnnotation";$a.defaults={adjustScaleRange:!0,backgroundColor:"transparent",backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:0,borderShadowColor:"transparent",borderWidth:0,callout:{borderCapStyle:"butt",borderColor:void 0,borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:1,display:!1,margin:5,position:"auto",side:5,start:"50%"},color:"black",content:null,display:!0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:void 0},height:void 0,hitTolerance:0,init:void 0,opacity:void 0,padding:6,position:"center",rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,textAlign:"center",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:void 0,xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:void 0,yValue:void 0,z:0};$a.defaultRoutes={borderColor:"color"};function Rw({x:n,y:a,width:e,height:t,options:i}){let o=i.borderWidth/2,r=vo(i.padding);return{x:n+r.left+o,y:a+r.top+o,width:e-r.left-r.right-i.borderWidth,height:t-r.top-r.bottom-i.borderWidth}}var Zd=(n,a,e)=>({x:n.x+e*(a.x-n.x),y:n.y+e*(a.y-n.y)}),Bd=(n,a,e)=>Zd(a,e,Math.abs((n-a.y)/(e.y-a.y))).x,Lg=(n,a,e)=>Zd(a,e,Math.abs((n-a.x)/(e.x-a.x))).y,Pr=n=>n*n,Nw=(n,a,{x:e,y:t,x2:i,y2:o},r)=>r==="y"?{start:Math.min(t,o),end:Math.max(t,o),value:a}:{start:Math.min(e,i),end:Math.max(e,i),value:n},Wg=(n,a,e,t)=>(1-t)*(1-t)*n+2*(1-t)*t*a+t*t*e,Gd=(n,a,e,t)=>({x:Wg(n.x,a.x,e.x,t),y:Wg(n.y,a.y,e.y,t)}),Fg=(n,a,e,t)=>2*(1-t)*(a-n)+2*t*(e-a),Bg=(n,a,e,t)=>-Math.atan2(Fg(n.x,a.x,e.x,t),Fg(n.y,a.y,e.y,t))+.5*Ci,wl=(()=>{class n extends na{inRange(e,t,i,o){let r=(this.options.borderWidth+this.options.hitTolerance)/2;if(i!=="x"&&i!=="y"){let s={mouseX:e,mouseY:t},{path:l,ctx:m}=this;if(l){Fn(m,this.options),m.lineWidth+=this.options.hitTolerance;let{chart:v}=this.$context,y=e*v.currentDevicePixelRatio,C=t*v.currentDevicePixelRatio,S=m.isPointInStroke(l,y,C)||zd(this,s,o);return m.restore(),S}let h=Pr(r);return Ww(this,s,h,o)||zd(this,s,o)}return Ow(this,{mouseX:e,mouseY:t},i,{hitSize:r,useFinalPosition:o})}getCenterPoint(e){return Ka(this,e)}draw(e){let{x:t,y:i,x2:o,y2:r,cp:s,options:l}=this;if(e.save(),!Fn(e,l))return e.restore();Bo(e,l);let m=Math.sqrt(Math.pow(o-t,2)+Math.pow(r-i,2));if(l.curve&&s)return $w(e,this,s,m),e.restore();let{startOpts:h,endOpts:v,startAdjust:y,endAdjust:C}=vf(this),S=Math.atan2(r-i,o-t);e.translate(t,i),e.rotate(S),e.beginPath(),e.moveTo(0+y,0),e.lineTo(m-C,0),e.shadowColor=l.borderShadowColor,e.stroke(),Ud(e,0,y,h),Ud(e,m,-C,v),e.restore()}get label(){return this.elements&&this.elements[0]}resolveElementProperties(e,t){let i=dw(e,t),{x:o,y:r,x2:s,y2:l}=i,m=Vw(i,e.chartArea),h=m?Lw({x:o,y:r},{x:s,y:l},e.chartArea):{x:o,y:r,x2:s,y2:l,width:Math.abs(s-o),height:Math.abs(l-r)};if(h.centerX=(s+o)/2,h.centerY=(l+r)/2,h.initProperties=Fo(e,h,t),t.curve){let y={x:h.x,y:h.y},C={x:h.x2,y:h.y2};h.cp=qw(h,t,nr(y,C))}let v=Fw(e,h,t.label);return v._visible=m,h.elements=[{type:"label",optionScope:"label",properties:v,initProperties:h.initProperties}],h}}return n.id="lineAnnotation",n})(),Gg={backgroundColor:void 0,backgroundShadowColor:void 0,borderColor:void 0,borderDash:void 0,borderDashOffset:void 0,borderShadowColor:void 0,borderWidth:void 0,display:void 0,fill:void 0,length:void 0,shadowBlur:void 0,shadowOffsetX:void 0,shadowOffsetY:void 0,width:void 0};wl.defaults={adjustScaleRange:!0,arrowHeads:{display:!1,end:Object.assign({},Gg),fill:!1,length:12,start:Object.assign({},Gg),width:6},borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:2,curve:!1,controlPoint:{y:"-50%"},display:!0,endValue:void 0,init:void 0,hitTolerance:0,label:{backgroundColor:"rgba(0,0,0,0.8)",backgroundShadowColor:"transparent",borderCapStyle:"butt",borderColor:"black",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:6,borderShadowColor:"transparent",borderWidth:0,callout:Object.assign({},$a.defaults.callout),color:"#fff",content:null,display:!1,drawTime:void 0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:"bold"},height:void 0,hitTolerance:void 0,opacity:void 0,padding:6,position:"center",rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,textAlign:"center",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,yAdjust:0,z:void 0},scaleID:void 0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,value:void 0,xMax:void 0,xMin:void 0,xScaleID:void 0,yMax:void 0,yMin:void 0,yScaleID:void 0,z:0};wl.descriptors={arrowHeads:{start:{_fallback:!0},end:{_fallback:!0},_fallback:!0}};wl.defaultRoutes={borderColor:"color"};function Ow(n,{mouseX:a,mouseY:e},t,{hitSize:i,useFinalPosition:o}){let r=Nw(a,e,n.getProps(["x","y","x2","y2"],o),t);return Kg(r,i)||zd(n,{mouseX:a,mouseY:e},o,t)}function Vw({x:n,y:a,x2:e,y2:t},{top:i,right:o,bottom:r,left:s}){return!(n<s&&e<s||n>o&&e>o||a<i&&t<i||a>r&&t>r)}function zg({x:n,y:a},e,{top:t,right:i,bottom:o,left:r}){return n<r&&(a=Lg(r,{x:n,y:a},e),n=r),n>i&&(a=Lg(i,{x:n,y:a},e),n=i),a<t&&(n=Bd(t,{x:n,y:a},e),a=t),a>o&&(n=Bd(o,{x:n,y:a},e),a=o),{x:n,y:a}}function Lw(n,a,e){let{x:t,y:i}=zg(n,a,e),{x:o,y:r}=zg(a,n,e);return{x:t,y:i,x2:o,y2:r,width:Math.abs(o-t),height:Math.abs(r-i)}}function Ww(n,{mouseX:a,mouseY:e},t=Ha,i){let{x:o,y:r,x2:s,y2:l}=n.getProps(["x","y","x2","y2"],i),m=s-o,h=l-r,v=Pr(m)+Pr(h),y=v===0?-1:((a-o)*m+(e-r)*h)/v,C,S;return y<0?(C=o,S=r):y>1?(C=s,S=l):(C=o+y*m,S=r+y*h),Pr(a-C)+Pr(e-S)<=t}function zd(n,{mouseX:a,mouseY:e},t,i){let o=n.label;return o.options.display&&o.inRange(a,e,i,t)}function Fw(n,a,e){let t=e.borderWidth,i=vo(e.padding),o=Sl(n.ctx,e),r=o.width+i.width+t,s=o.height+i.height+t;return Gw(a,e,{width:r,height:s,padding:i},n.chartArea)}function Bw(n){let{x:a,y:e,x2:t,y2:i}=n,o=Math.atan2(i-e,t-a);return o>Ci/2?o-Ci:o<Ci/-2?o+Ci:o}function Gw(n,a,e,t){let{width:i,height:o,padding:r}=e,{xAdjust:s,yAdjust:l}=a,m={x:n.x,y:n.y},h={x:n.x2,y:n.y2},v=a.rotation==="auto"?Bw(n):Ji(a.rotation),y=zw(i,o,v),C=Uw(n,a,{labelSize:y,padding:r},t),S=n.cp?Gd(m,n.cp,h,C):Zd(m,h,C),_={size:y.w,min:t.left,max:t.right,padding:r.left},F={size:y.h,min:t.top,max:t.bottom,padding:r.top},E=Hg(S.x,_)+s,N=Hg(S.y,F)+l;return{x:E-i/2,y:N-o/2,x2:E+i/2,y2:N+o/2,centerX:E,centerY:N,pointX:S.x,pointY:S.y,width:i,height:o,rotation:Hl(v)}}function zw(n,a,e){let t=Math.cos(e),i=Math.sin(e);return{w:Math.abs(n*t)+Math.abs(a*i),h:Math.abs(n*i)+Math.abs(a*t)}}function Uw(n,a,e,t){let i,o=Hw(n,t);return a.position==="start"?i=Ug({w:n.x2-n.x,h:n.y2-n.y},e,a,o):a.position==="end"?i=1-Ug({w:n.x-n.x2,h:n.y-n.y2},e,a,o):i=jd(1,a.position),i}function Ug(n,a,e,t){let{labelSize:i,padding:o}=a,r=n.w*t.dx,s=n.h*t.dy,l=r>0&&(i.w/2+o.left-t.x)/r,m=s>0&&(i.h/2+o.top-t.y)/s;return Al(Math.max(l,m),0,.25)}function Hw(n,a){let{x:e,x2:t,y:i,y2:o}=n,r=Math.min(i,o)-a.top,s=Math.min(e,t)-a.left,l=a.bottom-Math.max(i,o),m=a.right-Math.max(e,t);return{x:Math.min(s,m),y:Math.min(r,l),dx:s<=m?1:-1,dy:r<=l?1:-1}}function Hg(n,a){let{size:e,min:t,max:i,padding:o}=a,r=e/2;return e>i-t?(i+t)/2:(t>=n-o-r&&(n=t+o+r),i<=n+o+r&&(n=i-o-r),n)}function vf(n){let a=n.options,e=a.arrowHeads&&a.arrowHeads.start,t=a.arrowHeads&&a.arrowHeads.end;return{startOpts:e,endOpts:t,startAdjust:qg(n,e),endAdjust:qg(n,t)}}function qg(n,a){if(!a||!a.display)return 0;let{length:e,width:t}=a,i=n.options.borderWidth/2,o={x:e,y:t+i};return Math.abs(Bd(0,o,{x:0,y:i}))}function Ud(n,a,e,t){if(!t||!t.display)return;let{length:i,width:o,fill:r,backgroundColor:s,borderColor:l}=t,m=Math.abs(a-i)+e;n.beginPath(),Bo(n,t),Fn(n,t),n.moveTo(m,-o),n.lineTo(a+e,0),n.lineTo(m,o),r===!0?(n.fillStyle=s||l,n.closePath(),n.fill(),n.shadowColor="transparent"):n.shadowColor=t.borderShadowColor,n.stroke()}function qw(n,a,e){let{x:t,y:i,x2:o,y2:r,centerX:s,centerY:l}=n,m=Math.atan2(r-i,o-t),h=Yd(a.controlPoint,0),v={x:s+va(e,h.x,!1),y:l+va(e,h.y,!1)};return Ya(v,{x:s,y:l},m)}function $g(n,{x:a,y:e},{angle:t,adjust:i},o){!o||!o.display||(n.save(),n.translate(a,e),n.rotate(t),Ud(n,0,-i,o),n.restore())}function $w(n,a,e,t){let{x:i,y:o,x2:r,y2:s,options:l}=a,{startOpts:m,endOpts:h,startAdjust:v,endAdjust:y}=vf(a),C={x:i,y:o},S={x:r,y:s},_=Bg(C,e,S,0),F=Bg(C,e,S,1)-Ci,E=Gd(C,e,S,v/t),N=Gd(C,e,S,1-y/t),U=new Path2D;n.beginPath(),U.moveTo(E.x,E.y),U.quadraticCurveTo(e.x,e.y,N.x,N.y),n.shadowColor=l.borderShadowColor,n.stroke(U),a.path=U,a.ctx=n,$g(n,E,{angle:_,adjust:v},m),$g(n,N,{angle:F,adjust:y},h)}var ja=class extends na{inRange(a,e,t,i){let o=this.options.rotation,r=(this.options.borderWidth+this.options.hitTolerance)/2;if(t!=="x"&&t!=="y")return jw({x:a,y:e},this.getProps(["width","height","centerX","centerY"],i),o,r);let{x:s,y:l,x2:m,y2:h}=this.getProps(["x","y","x2","y2"],i),v=t==="y"?{start:l,end:h}:{start:s,end:m},y=Ya({x:a,y:e},this.getCenterPoint(i),Ji(-o));return y[t]>=v.start-r-Ha&&y[t]<=v.end+r+Ha}getCenterPoint(a){return Ka(this,a)}draw(a){let{width:e,height:t,centerX:i,centerY:o,options:r}=this;a.save(),xl(a,this.getCenterPoint(),r.rotation),Bo(a,this.options),a.beginPath(),a.fillStyle=r.backgroundColor;let s=Fn(a,r);a.ellipse(i,o,t/2,e/2,Ci/2,0,2*Ci),a.fill(),s&&(a.shadowColor=r.borderShadowColor,a.stroke()),a.restore()}get label(){return this.elements&&this.elements[0]}resolveElementProperties(a,e){return pf(a,e)}};ja.id="ellipseAnnotation";ja.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:1,display:!0,hitTolerance:0,init:void 0,label:Object.assign({},ba.defaults.label),rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xMax:void 0,xMin:void 0,xScaleID:void 0,yMax:void 0,yMin:void 0,yScaleID:void 0,z:0};ja.defaultRoutes={borderColor:"color",backgroundColor:"color"};ja.descriptors={label:{_fallback:!0}};function jw(n,a,e,t){let{width:i,height:o,centerX:r,centerY:s}=a,l=i/2,m=o/2;if(l<=0||m<=0)return!1;let h=Ji(e||0),v=Math.cos(h),y=Math.sin(h),C=Math.pow(v*(n.x-r)+y*(n.y-s),2),S=Math.pow(y*(n.x-r)-v*(n.y-s),2);return C/Math.pow(l+t,2)+S/Math.pow(m+t,2)<=1.0001}var Lo=class extends na{inRange(a,e,t,i){let{x:o,y:r,x2:s,y2:l,width:m}=this.getProps(["x","y","x2","y2","width"],i),h=(this.options.borderWidth+this.options.hitTolerance)/2;return t!=="x"&&t!=="y"?GS({x:a,y:e},this.getCenterPoint(i),m/2,h):Kg(t==="y"?{start:r,end:l,value:e}:{start:o,end:s,value:a},h)}getCenterPoint(a){return Ka(this,a)}draw(a){let e=this.options,t=e.borderWidth;if(e.radius<.1)return;a.save(),a.fillStyle=e.backgroundColor,Bo(a,e);let i=Fn(a,e);KS(a,this,this.centerX,this.centerY),i&&!Cl(e.pointStyle)&&(a.shadowColor=e.borderShadowColor,a.stroke()),a.restore(),e.borderWidth=t}resolveElementProperties(a,e){let t=hf(a,e);return t.initProperties=Fo(a,t,e),t}};Lo.id="pointAnnotation";Lo.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:1,display:!0,hitTolerance:0,init:void 0,pointStyle:"circle",radius:10,rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:void 0,xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:void 0,yValue:void 0,z:0};Lo.defaultRoutes={borderColor:"color",backgroundColor:"color"};var Wo=class extends na{inRange(a,e,t,i){if(t!=="x"&&t!=="y")return this.options.radius>=.1&&this.elements.length>1&&Kw(this.elements,a,e,i);let o=Ya({x:a,y:e},this.getCenterPoint(i),Ji(-this.options.rotation)),r=this.elements.map(m=>t==="y"?m.bY:m.bX),s=Math.min(...r),l=Math.max(...r);return o[t]>=s&&o[t]<=l}getCenterPoint(a){return Ka(this,a)}draw(a){let{elements:e,options:t}=this;a.save(),a.beginPath(),a.fillStyle=t.backgroundColor,Bo(a,t);let i=Fn(a,t),o=!0;for(let r of e)o?(a.moveTo(r.x,r.y),o=!1):a.lineTo(r.x,r.y);a.closePath(),a.fill(),i&&(a.shadowColor=t.borderShadowColor,a.stroke()),a.restore()}resolveElementProperties(a,e){let t=hf(a,e),{sides:i,rotation:o}=e,r=[],s=2*Ci/i,l=o*vs;for(let m=0;m<i;m++,l+=s){let h=Yw(t,e,l);h.initProperties=Fo(a,t,e),r.push(h)}return t.elements=r,t}};Wo.id="polygonAnnotation";Wo.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderShadowColor:"transparent",borderWidth:1,display:!0,hitTolerance:0,init:void 0,point:{radius:0},radius:10,rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,sides:3,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:void 0,xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:void 0,yValue:void 0,z:0};Wo.defaultRoutes={borderColor:"color",backgroundColor:"color"};function Yw({centerX:n,centerY:a},{radius:e,borderWidth:t,hitTolerance:i},o){let r=(t+i)/2,s=Math.sin(o),l=Math.cos(o),m={x:n+s*e,y:a-l*e};return{type:"point",optionScope:"point",properties:{x:m.x,y:m.y,centerX:m.x,centerY:m.y,bX:n+s*(e+r),bY:a-l*(e+r)}}}function Kw(n,a,e,t){let i=!1,o=n[n.length-1].getProps(["bX","bY"],t);for(let r of n){let s=r.getProps(["bX","bY"],t);s.bY>e!=o.bY>e&&a<(o.bX-s.bX)*(e-s.bY)/(o.bY-s.bY)+s.bX&&(i=!i),o=s}return i}var fa={box:ba,doughnutLabel:Vo,ellipse:ja,label:$a,line:wl,point:Lo,polygon:Wo};Object.keys(fa).forEach(n=>{or.describe(`elements.${fa[n].id}`,{_fallback:"plugins.annotation.common"})});var Xw={update:Object.assign},Zw=Xd.concat(yl),jg=(n,a)=>ea(a)?qd(n,a):n,Hd=n=>n==="color"||n==="font";function Qd(n="line"){return fa[n]?n:(console.warn(`Unknown annotation type: '${n}', defaulting to 'line'`),"line")}function Qw(n,a,e,t){let i=e_(n,e.animations,t),o=a.annotations,r=n_(a.elements,o);for(let s=0;s<o.length;s++){let l=o[s],m=bf(r,s,l.type),h=l.setContext(i_(n,m,r,l)),v=m.resolveElementProperties(n,h);v.skip=Jw(v),"elements"in v&&(t_(m,v.elements,h,i),delete v.elements),Qi(m.x)||Object.assign(m,v),Object.assign(m,v.initProperties),v.options=yf(h),i.update(m,v)}}function Jw(n){return isNaN(n.x)||isNaN(n.y)}function e_(n,a,e){return e==="reset"||e==="none"||e==="resize"?Xw:new $u(n,a)}function t_(n,a,e,t){let i=n.elements||(n.elements=[]);i.length=a.length;for(let o=0;o<a.length;o++){let r=a[o],s=r.properties,l=bf(i,o,r.type,r.initProperties),m=e[r.optionScope].override(r);s.options=yf(m),t.update(l,s)}}function bf(n,a,e,t){let i=fa[Qd(e)],o=n[a];return(!o||!(o instanceof i))&&(o=n[a]=new i,Object.assign(o,t)),o}function yf(n){let a=fa[Qd(n.type)],e={};e.id=n.id,e.type=n.type,e.drawTime=n.drawTime,Object.assign(e,qd(n,a.defaults),qd(n,a.defaultRoutes));for(let t of Zw)e[t]=n[t];return e}function qd(n,a){let e={};for(let t of Object.keys(a)){let i=a[t],o=n[t];Hd(t)&&Zi(o)?e[t]=o.map(r=>jg(r,i)):e[t]=jg(o,i)}return e}function i_(n,a,e,t){return a.$context||(a.$context=Object.assign(Object.create(n.getContext()),{element:a,get elements(){return e.filter(i=>i&&i.options)},id:t.id,type:"annotation"}))}function n_(n,a){let e=a.length,t=n.length;if(t<e){let i=e-t;n.splice(t,0,...new Array(i))}else t>e&&n.splice(e,t-e);return n}var a_="3.1.0",ga=new Map,Yg=n=>n.type!=="doughnutLabel",o_=Xd.concat(yl),Af={id:"annotation",version:a_,beforeRegister(){zS("chart.js","4.0",Dt.version)},afterRegister(){Dt.register(fa)},afterUnregister(){Dt.unregister(fa)},beforeInit(n){ga.set(n,{annotations:[],elements:[],visibleElements:[],listeners:{},listened:!1,moveListened:!1,hooks:{},hooked:!1,hovered:[]})},beforeUpdate(n,a,e){let t=ga.get(n),i=t.annotations=[],o=e.annotations;ea(o)?Object.keys(o).forEach(r=>{let s=o[r];ea(s)&&(s.id=r,i.push(s))}):Zi(o)&&i.push(...o),xw(i.filter(Yg),n.scales)},afterDataLimits(n,a){let e=ga.get(n);Cw(n,a.scale,e.annotations.filter(Yg).filter(t=>t.display&&t.adjustScaleRange))},afterUpdate(n,a,e){let t=ga.get(n);fw(n,t,e),Qw(n,t,e,a.mode),t.visibleElements=t.elements.filter(i=>!i.skip&&i.options.display),Aw(n,t,e)},beforeDatasetsDraw(n,a,e){Ir(n,"beforeDatasetsDraw",e.clip)},afterDatasetsDraw(n,a,e){Ir(n,"afterDatasetsDraw",e.clip)},beforeDatasetDraw(n,a,e){Ir(n,a.index,e.clip)},beforeDraw(n,a,e){Ir(n,"beforeDraw",e.clip)},afterDraw(n,a,e){Ir(n,"afterDraw",e.clip)},beforeEvent(n,a,e){let t=ga.get(n);vw(t,a.event,e)&&(a.changed=!0)},afterDestroy(n){ga.delete(n)},getAnnotations(n){let a=ga.get(n);return a?a.elements:[]},_getAnnotationElementsAtEventForMode(n,a,e){return $d(n,a,e)},defaults:{animations:{numbers:{properties:["x","y","x2","y2","width","height","centerX","centerY","pointX","pointY","radius"],type:"number"},colors:{properties:["backgroundColor","borderColor"],type:"color"}},clip:!0,interaction:{mode:void 0,axis:void 0,intersect:void 0},common:{drawTime:"afterDatasetsDraw",init:!1,label:{}}},descriptors:{_indexable:!1,_scriptable:n=>!o_.includes(n)&&n!=="init",annotations:{_allKeys:!1,_fallback:(n,a)=>`elements.${fa[Qd(a.type)].id}`},interaction:{_fallback:!0},common:{label:{_indexable:Hd,_fallback:!0},_indexable:Hd}},additionalOptionScopes:[""]};function Ir(n,a,e){let{ctx:t,chartArea:i}=n,o=ga.get(n);e&&go(t,i);let r=r_(o.visibleElements,a).sort((s,l)=>s.element.options.z-l.element.options.z);for(let s of r)s_(t,i,o,s);e&&fo(t)}function r_(n,a){let e=[];for(let t of n)if(t.options.drawTime===a&&e.push({element:t,main:!0}),t.elements&&t.elements.length)for(let i of t.elements)i.options.display&&i.options.drawTime===a&&e.push({element:i});return e}function s_(n,a,e,t){let i=t.element;t.main?(Ng(e,i,"beforeDraw"),i.draw(n,a),Ng(e,i,"afterDraw")):i.draw(n,a)}var l_=["widgetDataChart"];function d_(n,a){n&1&&ee(0,"canvas",1,0)}function c_(n,a){n&1&&(D(0,"div",2)(1,"p"),c(2,"Ready to configure"),G(),D(3,"p",3),c(4,"Double-tap to begin"),G()())}Dt.register(Af,Oa,yo,As,Cs,An,ra,ia,oa,aa);var Cf=(()=>{class n{id=x.required();type=x.required();theme=x.required();runtime=A(xe);dsService=A(Cn);ngZone=A(Je);canvasService=A(St);unitsService=A(He);datasetLifecycle=A(So);widgetDataChart=he("widgetDataChart",{read:nt});static DEFAULT_CONFIG={displayName:"Chart Label",color:"contrast",filterSelfPaths:!0,datachartPath:null,datachartSource:null,convertUnitTo:null,timeScale:"minute",period:10,numDecimal:1,inverseYAxis:!1,datasetAverageArray:"sma",showDataPoints:!1,showAverageData:!0,trackAgainstAverage:!1,showDatasetMinimumValueLine:!1,showDatasetMaximumValueLine:!1,showDatasetAverageValueLine:!0,showDatasetAngleAverageValueLine:!1,showLabel:!0,showTimeScale:!1,startScaleAtZero:!1,verticalChart:!1,showYScale:!1,yScaleSuggestedMin:null,yScaleSuggestedMax:null,enableMinMaxScaleLimit:!1,yScaleMin:null,yScaleMax:null};lineChartData={datasets:[]};lineChartOptions={parsing:!1,datasets:{line:{pointRadius:0,pointHoverRadius:0,tension:.4}},animations:{tension:{easing:"easeInOutCubic"}}};lineChartType="line";chart;dsServiceSub=null;datasetConfig=null;dataSourceInfo=null;lastVerticalChart=null;hasPath=L(()=>!!this.runtime.options()?.datachartPath);pathSignature=L(()=>{let e=this.runtime.options();if(e.datachartPath)return[e.datachartPath,e.convertUnitTo,e.datachartSource,e.timeScale,e.period].join("|")});previousPathSignature=void 0;constructor(){W(()=>{let e=this.pathSignature();z(()=>{e!==this.previousPathSignature&&z(()=>{this.previousPathSignature=e,this.rebuildForDataset(this.runtime.options())})})}),W(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||z(()=>{this.lastVerticalChart!==null&&this.lastVerticalChart!==e.verticalChart?(this.lastVerticalChart=e.verticalChart,this.rebuildForDataset(e)):this.chart&&(this.ensureAverageDatasetPresence(),this.updateAnnotationVisibility(),this.applyDynamicTrackAverageStyling(),this.setChartOptions(e),this.setDatasetsColors(),this.ngZone.runOutsideAngular(()=>this.chart?.update("none")))})}),W(()=>{let e=this.runtime.options(),t=this.widgetDataChart(),i=this.hasPath();!e||!i||!t||this.chart||z(()=>this.rebuildForDataset(e))})}rebuildForDataset(e){e.datachartPath&&this.widgetDataChart()&&(this.dsServiceSub?.unsubscribe(),this.lineChartData.datasets=[],this.datasetLifecycle.syncDataChartDataset(this.id(),e,this.pathSignature()),this.datasetConfig=this.dsService.getDatasetConfig(this.id()),this.dataSourceInfo=this.dsService.getDataSourceInfo(this.id()),this.datasetConfig&&(this.createDatasets(e),this.setChartOptions(e),this.chart?.destroy(),this.chart=new Dt(this.widgetDataChart().nativeElement.getContext("2d"),{type:this.lineChartType,data:this.lineChartData,options:this.lineChartOptions}),this.startStreaming(),this.ngZone.runOutsideAngular(()=>this.chart?.update())))}setChartOptions(e){this.lineChartOptions.maintainAspectRatio=!1,this.lineChartOptions.animation=!1,this.lineChartOptions.indexAxis=e.verticalChart?"y":"x",e.verticalChart?this.lineChartOptions.scales={y:{type:"realtime",display:e.showTimeScale,position:e.verticalChart?"right":"left",suggestedMin:"",suggestedMax:"",title:{display:!0,text:`Last ${this.datasetConfig.period} ${this.datasetConfig.timeScaleFormat}`,align:"center",color:this.getThemeColors().averageChartLine},time:{unit:this.datasetConfig.timeScaleFormat,minUnit:"second",round:"second",displayFormats:{hour:"k:mm''",minute:"mm''",second:'ss"',millisecond:"SSS"}},ticks:{autoSkip:!0,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!0,color:this.theme().contrastDimmer}},x:{type:"linear",display:e.showYScale,position:e.verticalChart?"top":"bottom",suggestedMin:e.enableMinMaxScaleLimit?null:e.yScaleSuggestedMin,suggestedMax:e.enableMinMaxScaleLimit?null:e.yScaleSuggestedMax,min:e.enableMinMaxScaleLimit?e.yScaleMin:null,max:e.enableMinMaxScaleLimit?e.yScaleMax:null,beginAtZero:e.startScaleAtZero,reverse:e.inverseYAxis,title:{display:!1,text:"Value Axis",align:"center",color:this.getThemeColors().averageChartLine},ticks:{maxTicksLimit:8,precision:e.numDecimal,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!0,color:this.theme().contrastDimmer}}}:this.lineChartOptions.scales={x:{type:"realtime",display:e.showTimeScale,title:{display:!0,text:`Last ${this.datasetConfig.period} ${this.datasetConfig.timeScaleFormat}`,align:"center",color:this.getThemeColors().averageChartLine},time:{unit:this.datasetConfig.timeScaleFormat,minUnit:"second",round:"second",displayFormats:{hour:"k:mm''",minute:"mm''",second:'ss"',millisecond:"SSS"}},ticks:{autoSkip:!0,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!0,color:this.theme().contrastDimmer}},y:{display:e.showYScale,position:"right",suggestedMin:e.enableMinMaxScaleLimit?null:e.yScaleSuggestedMin,suggestedMax:e.enableMinMaxScaleLimit?null:e.yScaleSuggestedMax,min:e.enableMinMaxScaleLimit?e.yScaleMin:null,max:e.enableMinMaxScaleLimit?e.yScaleMax:null,beginAtZero:e.startScaleAtZero,reverse:e.inverseYAxis,title:{display:!1,text:"Value Axis",align:"center",color:this.getThemeColors().averageChartLine},ticks:{maxTicksLimit:8,precision:e.numDecimal,color:this.getThemeColors().averageChartLine,major:{enabled:!0}},grid:{display:!0,color:this.theme().contrastDimmer}}},this.lineChartOptions.plugins={title:{display:!0,align:"end",padding:{top:3,bottom:0},text:"",font:{size:32},color:this.getThemeColors().chartValue},subtitle:{display:e.showLabel,align:"start",padding:{top:-35,bottom:20},text:` ${e.displayName}`,font:{size:22},color:this.getThemeColors().chartLabel},annotation:{annotations:{minimumLine:{type:"line",scaleID:e.verticalChart?"x":"y",display:e.showDatasetMinimumValueLine,value:null,drawTime:"afterDatasetsDraw",label:{display:!0,position:"start",yAdjust:12,padding:4,color:this.getThemeColors().averageChartLine,backgroundColor:"rgba(63,63,63,0.0)"}},maximumLine:{type:"line",scaleID:e.verticalChart?"x":"y",display:e.showDatasetMaximumValueLine,value:null,drawTime:"afterDatasetsDraw",label:{display:!0,position:"start",yAdjust:-12,padding:4,color:this.getThemeColors().averageChartLine,backgroundColor:"rgba(63,63,63,0.0)"}},averageLine:{type:"line",scaleID:e.verticalChart?"x":"y",display:e.showDatasetAverageValueLine,value:null,borderDash:[6,6],borderColor:this.getThemeColors().averageChartLine,drawTime:"afterDatasetsDraw",label:{display:!0,position:"start",padding:4,color:this.getThemeColors().chartValue,backgroundColor:"rgba(63,63,63,0.7)"}}}},legend:{display:!1},streaming:{duration:this.dataSourceInfo.maxDataPoints*this.dataSourceInfo.sampleTime,delay:this.dataSourceInfo.sampleTime,frameRate:this.datasetConfig.timeScaleFormat==="day"?5:this.datasetConfig.timeScaleFormat==="hour"?8:this.datasetConfig.timeScaleFormat==="minute"?15:30}}}createDatasets(e){let t,i;e.inverseYAxis&&e.trackAgainstAverage?(t="start",i=!1):e.inverseYAxis&&!e.trackAgainstAverage?(t=!1,i="start"):!e.inverseYAxis&&e.trackAgainstAverage?(t=!0,i=!1):(t=!1,i=!0),this.lineChartData.datasets=[],this.lineChartData.datasets.push({label:"Value",data:[],order:e.trackAgainstAverage?1:0,parsing:!1,tension:0,pointRadius:e.showDataPoints?e.trackAgainstAverage?0:1.5:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:e.trackAgainstAverage||e.showDataPoints?0:3,fill:t}),e.showAverageData&&this.lineChartData.datasets.push({label:"Average",data:[],order:e.trackAgainstAverage?0:1,parsing:!1,tension:.4,pointRadius:e.showDataPoints&&e.trackAgainstAverage?1.5:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:e.trackAgainstAverage?e.showDataPoints?0:3:0,fill:i}),this.setDatasetsColors()}setDatasetsColors(){this.lineChartData.datasets.forEach(e=>{e.label==="Value"?(e.borderColor=this.getThemeColors().valueLine,e.backgroundColor=this.getThemeColors().valueFill):e.label==="Average"&&(e.borderColor=this.getThemeColors().averageLine,e.backgroundColor=this.getThemeColors().averageFill)})}ensureAverageDatasetPresence(){let e=this.runtime.options();if(!e||!this.chart)return;let t=this.lineChartData.datasets.some(i=>i.label==="Average");if(e.showAverageData&&!t){if(this.lineChartData.datasets.findIndex(o=>o.label==="Value")>=0){let o=e.inverseYAxis?e.trackAgainstAverage?!1:"start":!e.trackAgainstAverage;this.lineChartData.datasets.push({label:"Average",data:[],order:e.trackAgainstAverage?0:1,parsing:!1,tension:.4,pointRadius:0,pointHoverRadius:0,pointHitRadius:0,borderWidth:e.trackAgainstAverage?3:0,fill:o})}}else!e.showAverageData&&t&&(this.lineChartData.datasets=this.lineChartData.datasets.filter(i=>i.label!=="Average"))}applyDynamicTrackAverageStyling(){let e=this.runtime.options();if(!e)return;let t=this.lineChartData.datasets.find(s=>s.label==="Value"),i=this.lineChartData.datasets.find(s=>s.label==="Average"),o,r;e.inverseYAxis&&e.trackAgainstAverage?(o="start",r=!1):e.inverseYAxis&&!e.trackAgainstAverage?(o=!1,r="start"):!e.inverseYAxis&&e.trackAgainstAverage?(o=!0,r=!1):(o=!1,r=!0),t&&(t.order=e.trackAgainstAverage?1:0,t.borderWidth=e.trackAgainstAverage?0:3,t.fill=o),i&&(i.order=e.trackAgainstAverage?0:1,i.borderWidth=e.trackAgainstAverage?3:0,i.fill=r)}updateAnnotationVisibility(){let e=this.runtime.options();if(!e||!this.chart)return;let t=this.chart.options.plugins.annotation?.annotations;t&&(t.minimumLine&&(t.minimumLine.display=e.showDatasetMinimumValueLine),t.maximumLine&&(t.maximumLine.display=e.showDatasetMaximumValueLine),t.averageLine&&(t.averageLine.display=e.showDatasetAverageValueLine))}getThemeColors(){let e=this.runtime.options()?.color,t={valueLine:null,valueFill:null,averageLine:null,averageFill:null,averageChartLine:null,chartLabel:null,chartValue:null};switch(e){case"contrast":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().contrastDimmer,t.valueFill=this.theme().contrastDimmer,t.averageLine=this.theme().contrast,t.averageFill=this.theme().contrast,t.chartValue=t.averageLine):(t.valueLine=this.theme().contrast,t.valueFill=this.theme().contrast,t.averageLine=this.theme().contrastDimmer,t.averageFill=this.theme().contrastDimmer,t.chartValue=this.theme().contrast),t.averageChartLine=this.theme().contrastDim,t.chartLabel=this.theme().contrastDim;break;case"blue":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().blueDimmer,t.valueFill=this.theme().blueDimmer,t.averageLine=this.theme().blue,t.averageFill=this.theme().blue,t.chartValue=t.averageLine):(t.valueLine=this.theme().blue,t.valueFill=this.theme().blue,t.averageLine=this.theme().blueDimmer,t.averageFill=this.theme().blueDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().blueDim,t.chartLabel=this.theme().contrastDim;break;case"green":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().greenDimmer,t.valueFill=this.theme().greenDimmer,t.averageLine=this.theme().green,t.averageFill=this.theme().green,t.chartValue=t.averageLine):(t.valueLine=this.theme().green,t.valueFill=this.theme().green,t.averageLine=this.theme().greenDimmer,t.averageFill=this.theme().greenDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().greenDim,t.chartLabel=this.theme().contrastDim;break;case"pink":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().pinkDimmer,t.valueFill=this.theme().pinkDimmer,t.averageLine=this.theme().pink,t.averageFill=this.theme().pink,t.chartValue=t.averageLine):(t.valueLine=this.theme().pink,t.valueFill=this.theme().pink,t.averageLine=this.theme().pinkDimmer,t.averageFill=this.theme().pinkDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().pinkDim,t.chartLabel=this.theme().contrastDim;break;case"orange":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().orangeDimmer,t.valueFill=this.theme().orangeDimmer,t.averageLine=this.theme().orange,t.averageFill=this.theme().orange,t.chartValue=t.averageLine):(t.valueLine=this.theme().orange,t.valueFill=this.theme().orange,t.averageLine=this.theme().orangeDimmer,t.averageFill=this.theme().orangeDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().orangeDim,t.chartLabel=this.theme().contrastDim;break;case"purple":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().purpleDimmer,t.valueFill=this.theme().purpleDimmer,t.averageLine=this.theme().purple,t.averageFill=this.theme().purple,t.chartValue=t.averageLine):(t.valueLine=this.theme().purple,t.valueFill=this.theme().purple,t.averageLine=this.theme().purpleDimmer,t.averageFill=this.theme().purpleDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().purpleDim,t.chartLabel=this.theme().contrastDim;break;case"grey":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().greyDimmer,t.valueFill=this.theme().greyDimmer,t.averageLine=this.theme().grey,t.averageFill=this.theme().grey,t.chartValue=t.averageLine):(t.valueLine=this.theme().grey,t.valueFill=this.theme().grey,t.averageLine=this.theme().greyDimmer,t.averageFill=this.theme().greyDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().greyDim,t.chartLabel=this.theme().contrastDim;break;case"yellow":this.runtime.options()?.trackAgainstAverage?(t.valueLine=this.theme().yellowDimmer,t.valueFill=this.theme().yellowDimmer,t.averageLine=this.theme().yellow,t.averageFill=this.theme().yellow,t.chartValue=t.averageLine):(t.valueLine=this.theme().yellow,t.valueFill=this.theme().yellow,t.averageLine=this.theme().yellowDimmer,t.averageFill=this.theme().yellowDimmer,t.chartValue=t.valueFill),t.averageChartLine=this.theme().yellowDim,t.chartLabel=this.theme().contrastDim;break}return t}getUnitsLabel(){let e=null,t=this.runtime.options()?.convertUnitTo;switch(t){case"percent":case"percentraw":e="%";break;case"latitudeMin":e="latitude in minutes";break;case"latitudeSec":e="latitude in secondes";break;case"longitudeMin":e="longitude in minutes";break;case"longitudeSec":e="longitude in secondes";break;default:e=t;break}return e}startStreaming(){let e=this.runtime.options();if(!e?.datachartPath)return;this.dsServiceSub?.unsubscribe();let t=this.dsService.getDatasetBatchThenLiveObservable(this.id());this.dsServiceSub=t?.subscribe(i=>{if(this.chart){if(Array.isArray(i)){let o=this.transformDatasetRows(i,0);if(this.chart.data.datasets[0].data.push(...o),e.showAverageData&&this.lineChartData.datasets[1]){let s=this.transformDatasetRows(i,e.datasetAverageArray);this.chart.data.datasets[1].data.push(...s)}let r=i[i.length-1];r&&this.applyTitleAndAnnotationValues(r,e)}else{let o=this.transformDatasetRows([i],0)[0];if(this.chart.data.datasets[0].data.push(o),e.showAverageData&&this.lineChartData.datasets[1]){let r=this.transformDatasetRows([i],e.datasetAverageArray)[0];this.chart.data.datasets[1].data.push(r)}this.applyTitleAndAnnotationValues(i,e)}this.ngZone.runOutsideAngular(()=>this.chart?.update("none"))}})}applyTitleAndAnnotationValues(e,t){let i=t.trackAgainstAverage?e.data.sma??e.data.value:e.data.value,o=this.unitsService.convertToUnit(t.convertUnitTo,i);Number.isFinite(o)&&(this.chart.options.plugins.title.text=`${o.toFixed(t.numDecimal)} ${this.getUnitsLabel()} `);let r=this.unitsService.convertToUnit(t.convertUnitTo,e.data.lastAverage),s=this.unitsService.convertToUnit(t.convertUnitTo,e.data.lastMinimum),l=this.unitsService.convertToUnit(t.convertUnitTo,e.data.lastMaximum),h=this.chart.options.plugins.annotation?.annotations;h&&(Number.isFinite(r)&&h.averageLine?.value!==r&&(h.averageLine.value=r,h.averageLine.label.content=`${r.toFixed(t.numDecimal)}`),Number.isFinite(s)&&h.minimumLine?.value!==s&&(h.minimumLine.value=s,h.minimumLine.label.content=`${s.toFixed(t.numDecimal)}`),Number.isFinite(l)&&h.maximumLine?.value!==l&&(h.maximumLine.value=l,h.maximumLine.label.content=`${l.toFixed(t.numDecimal)}`))}transformDatasetRows(e,t){let i=this.runtime.options(),o=l=>this.unitsService.convertToUnit(i.convertUnitTo,l),r=i.verticalChart,s=i.datasetAverageArray;return e.map(l=>{if(r){if(t===0)return{x:o(l.data.value),y:l.timestamp};{let m={sma:l.data.sma,ema:l.data.ema,dema:l.data.doubleEma,avg:l.data.lastAverage};return{x:o(m[s]),y:l.timestamp}}}else{if(t===0)return{x:l.timestamp,y:o(l.data.value)};{let m={sma:l.data.sma,ema:l.data.ema,dema:l.data.doubleEma,avg:l.data.lastAverage};return{x:l.timestamp,y:o(m[s])}}}})}ngOnDestroy(){this.dsServiceSub?.unsubscribe(),this.chart?.destroy();let e=this.widgetDataChart?.()?.nativeElement;this.canvasService.releaseCanvas(e,{clear:!0,removeFromDom:!0})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-data-chart"]],viewQuery:function(t,i){t&1&&_e(i.widgetDataChart,l_,5,nt),t&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:2,vars:1,consts:[["widgetDataChart",""],[2,"z-index","inherit"],[1,"empty-state"],[1,"hint"]],template:function(t,i){t&1&&I(0,d_,2,0,"canvas",1)(1,c_,5,0,"div",2),t&2&&P(i.hasPath()?0:1)},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}.empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;text-align:center;color:var(--mat-sys-on-surface-variant)}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:4px 0;padding:0 16px}.empty-state[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{font-size:.85em;opacity:.7}"],changeDetection:0})}return n})();var xf=(()=>{class n{data=x(null,{alias:"controlData"});theme=x(null);dimensions=x.required();toggleClick=ft();toggleOff="0 35 180 35";toggleOn="0 0 180 35";ctrlState=null;ctrlColor="";oldTheme=null;viewBox=this.toggleOff;labelColor=null;valueColor=null;constructor(){}ngDoCheck(){let e=this.data();e.value!=this.ctrlState&&(this.ctrlState=e.value,this.viewBox=e.value?this.toggleOn:this.toggleOff),e.color!=this.ctrlColor&&(this.ctrlColor=e.color,this.getColors(e.color));let t=this.theme();this.oldTheme!=t&&(this.oldTheme=t,this.getColors(e.color))}toggle(e){let t=this.data();t.value=e,this.toggleClick.emit(t)}getColors(e){switch(e){case"contrast":this.labelColor=this.theme().contrastDim,this.valueColor=this.theme().contrast;break;case"blue":this.labelColor=this.theme().blueDim,this.valueColor=this.theme().blue;break;case"green":this.labelColor=this.theme().greenDim,this.valueColor=this.theme().green;break;case"pink":this.labelColor=this.theme().pinkDim,this.valueColor=this.theme().pink;break;case"orange":this.labelColor=this.theme().orangeDim,this.valueColor=this.theme().orange;break;case"purple":this.labelColor=this.theme().purpleDim,this.valueColor=this.theme().purple;break;case"grey":this.labelColor=this.theme().greyDim,this.valueColor=this.theme().grey;break;case"yellow":this.labelColor=this.theme().yellowDim,this.valueColor=this.theme().yellow;break;default:this.labelColor=this.theme().contrastDim,this.valueColor=this.theme().contrast;break}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["app-svg-boolean-light"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:26,vars:9,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg"],["id","defs1"],["id","linearGradient32"],["offset","0","id","stop32",2,"stop-color","#000000","stop-opacity","0.88486844"],["offset","1","id","stop33",2,"stop-color","#f7f7f7","stop-opacity","0.17763157"],[0,"xlink","href","#linearGradient32","id","linearGradient33","x1","7.0431595","y1","17.869596","x2","39.043159","y2","17.869596","gradientUnits","userSpaceOnUse"],["id","disabled","transform","translate(0,35)"],["width","180","height","35","id","rect1-5","x","0","y","0",2,"display","inline","opacity","1","fill","black","fill-opacity","0","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","1"],["x","0","y","0","width","175","height","35","viewBox","0 0 175 35"],["id","text1-5","x","47.083984","y","22.636719",2,"text-align","center","font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","14px","font-family","arial","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["transform","translate(6,2)","id","disabledToogleControl"],["cx","18","cy","16","id","circle3-7","r","13.5",2,"stroke-width","5","stroke","url(#linearGradient33)","stroke-opacity","0.2","stroke-dasharray","none"],["id","enabled"],["width","180","height","35","id","rect1","x","0","y","0",2,"display","inline","opacity","1","fill","black","fill-opacity","0","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","1"],["id","glow","x","-50%","y","-50%","width","200%","height","200%"],["stdDeviation","2.5","result","coloredBlur"],["in","coloredBlur"],["in","SourceGraphic"],["filter","url(#glow)","id","text1","x","47.083984","y","22.636719",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","14px","font-family","arial","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["transform","translate(6,2)","id","enabledToogleControl"],["filter","url(#glow)","cx","18","cy","16","id","circle3","r","13.5",2,"stroke","url(#linearGradient33)","stroke-width","5","stroke-opacity","0.2","stroke-dasharray","none"]],template:function(t,i){t&1&&(oe(),D(0,"svg",0)(1,"defs",1)(2,"linearGradient",2),ee(3,"stop",3)(4,"stop",4),G(),ee(5,"linearGradient",5),G(),D(6,"g",6),ee(7,"rect",7),D(8,"svg",8)(9,"text",9),c(10),G()(),D(11,"g",10),ee(12,"circle",11),G()(),D(13,"g",12),ee(14,"rect",13),D(15,"svg",8)(16,"defs")(17,"filter",14),ee(18,"feGaussianBlur",15),D(19,"feMerge"),ee(20,"feMergeNode",16)(21,"feMergeNode",17),G()()(),D(22,"text",18),c(23),G()(),D(24,"g",19),ee(25,"circle",20),G()()()),t&2&&(ie("height",i.dimensions().height)("width",i.dimensions().width)("viewBox",i.viewBox),f(9),ie("fill",i.labelColor),f(),be(" ",i.data().ctrlLabel," "),f(2),ie("fill",i.labelColor),f(10),ie("fill",i.valueColor),f(),be("",i.data().ctrlLabel," "),f(2),ie("fill",i.valueColor))},encapsulation:2,changeDetection:0})}return n})();var Sf=(()=>{class n{data=x(null,{alias:"controlData"});theme=x(null);dimensions=x.required();toggleClick=ft();toggleOff="0 35 180 35";toggleOn="0 0 180 35";oldTheme=null;holdTimeoutId=null;emitIntervalId=null;pressed=!1;isSwiping=!1;pointerStartX=0;pointerStartY=0;viewBox=this.toggleOff;labelColorEnabled=null;labelColorDisabled=null;valueColor=null;ctrlColor="";ngDoCheck(){this.viewBox=this.pressed?this.toggleOn:this.toggleOff;let e=this.data();e.color!=this.ctrlColor&&(this.ctrlColor=e.color,this.getColors(e.color));let t=this.theme();this.oldTheme!=t&&(this.oldTheme=t,this.getColors(this.data().color))}handleClickDown(e){this.isSwiping=!1,this.pointerStartX=e.clientX,this.pointerStartY=e.clientY,this.clearTimers(),this.holdTimeoutId=setTimeout(()=>{if(!this.isSwiping){this.pressed=!0;let t=Yt(this.data());t.value=this.pressed,this.toggleClick.emit(t),this.emitIntervalId=setInterval(()=>{this.toggleClick.emit(t)},100)}},200)}handlePointerMove(e){let t=Math.abs(e.clientX-this.pointerStartX),i=Math.abs(e.clientY-this.pointerStartY);(t>30||i>30)&&(this.isSwiping=!0,this.holdTimeoutId&&(clearTimeout(this.holdTimeoutId),this.holdTimeoutId=null))}handleClickUp(){if(this.isSwiping){this.isSwiping=!1;return}this.pressed=!1,this.emitIntervalId&&(clearInterval(this.emitIntervalId),this.emitIntervalId=null),this.holdTimeoutId&&(clearTimeout(this.holdTimeoutId),this.holdTimeoutId=null)}getColors(e){switch(e){case"contrast":this.labelColorEnabled="black",this.labelColorDisabled=this.theme().contrastDim,this.valueColor=this.theme().contrast;break;case"blue":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().blueDim,this.valueColor=this.theme().blue;break;case"green":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().greenDim,this.valueColor=this.theme().green;break;case"pink":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().pinkDim,this.valueColor=this.theme().pink;break;case"orange":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().orangeDim,this.valueColor=this.theme().orange;break;case"purple":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().purpleDim,this.valueColor=this.theme().purple;break;case"grey":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().greyDim,this.valueColor=this.theme().grey;break;case"yellow":this.labelColorEnabled=this.theme().contrast,this.labelColorDisabled=this.theme().yellowDim,this.valueColor=this.theme().yellow;break;default:this.labelColorEnabled="black",this.labelColorDisabled=this.theme().contrastDim,this.valueColor=this.theme().contrast;break}}clearTimers(){this.holdTimeoutId&&(clearTimeout(this.holdTimeoutId),this.holdTimeoutId=null),this.emitIntervalId&&(clearInterval(this.emitIntervalId),this.emitIntervalId=null)}ngOnDestroy(){this.clearTimers()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["app-svg-boolean-button"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:15,vars:9,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg"],["id","defs9"],[3,"pointerup","pointerleave","pointerdown","pointermove"],["id","disabled","transform","translate(0,35)"],["id","clickRecDisabled","width","180","height","35","x","0","y","0","pointer-events","all",2,"display","inline","opacity","1","fill","transparent","fill-opacity","1","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","0"],["id","buttonDisabled","width","165.02518","height","25.025183","rx","3.6672263","x","7.4874101","y","4.9874086",2,"display","inline","mix-blend-mode","normal","fill-opacity","1","stroke","#ffffff","stroke-width","1.5","stroke-dasharray","none","stroke-opacity","0.2"],["x","12","y","0","width","156","height","35","viewBox","0 0 156 35"],["id","textDisabled","x","77.968102","y","22",2,"text-anchor","middle","text-align","center","font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","14px","font-family","arial","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["id","enabled"],["width","180","height","35","id","rect1","x","0","y","0","pointer-events","all",2,"display","inline","opacity","1","fill","transparent","fill-opacity","1","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","0"],["id","buttonEnabled","width","165.02518","height","25.025183","rx","3.6672263","x","5.9874086","y","4.9874086","transform","translate(1.5)",2,"display","inline","opacity","1","mix-blend-mode","normal","stroke","#000000","stroke-width","1.5","stroke-dasharray","none","stroke-opacity","0.2"],["id","textEnabled","x","77.968102","y","22",2,"text-anchor","middle","text-align","center","font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","14px","font-family","arial","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"]],template:function(t,i){t&1&&(oe(),D(0,"svg",0),ee(1,"defs",1),D(2,"g",2),Jo("pointerup",function(){return i.handleClickUp()})("pointerleave",function(){return i.handleClickUp()})("pointerdown",function(r){return i.handleClickDown(r)})("pointermove",function(r){return i.handlePointerMove(r)}),D(3,"g",3),ee(4,"rect",4)(5,"rect",5),D(6,"svg",6)(7,"text",7),c(8),G()()(),D(9,"g",8),ee(10,"rect",9)(11,"rect",10),D(12,"svg",6)(13,"text",11),c(14),G()()()()()),t&2&&(ie("height",i.dimensions().height)("width",i.dimensions().width)("viewBox",i.viewBox),f(5),ie("fill",i.labelColorDisabled),f(2),ie("fill",i.labelColorDisabled),f(),be(" ",i.data().ctrlLabel," "),f(3),ie("fill",i.valueColor),f(2),ie("fill",i.labelColorEnabled),f(),be(" ",i.data().ctrlLabel," "))},encapsulation:2,changeDetection:0})}return n})();function _l(n={}){let a=n.threshold??30,e=!1,t=0,i=0,o=null,r=null,s=()=>{e=!1,t=0,i=0,o=null,r=null};return{onPointerDown(l){e=!1,t=l.clientX,i=l.clientY;let m=l.currentTarget;if(m&&typeof m.setPointerCapture=="function")try{m.setPointerCapture(l.pointerId),o=m,r=l.pointerId}catch(h){}},onPointerMove(l){let m=Math.abs(l.clientX-t),h=Math.abs(l.clientY-i);(m>a||h>a)&&(e=!0)},onPointerUp(l){if(o&&r!==null){let h=o;if(typeof h.releasePointerCapture=="function")try{(!l||h.hasPointerCapture?.(r))&&h.releasePointerCapture(r)}catch(v){}}let m=!e;return s(),m},onPointerCancel(l){if(o&&r!==null){let m=o;if(typeof m.releasePointerCapture=="function")try{(!l||m.hasPointerCapture?.(r))&&m.releasePointerCapture(r)}catch(h){}}s()},reset:s}}var wf=(()=>{class n{data=x(null,{alias:"controlData"});theme=x(null);dimensions=x.required();toggleClick=ft();toggleOff="0 35 180 35";toggleOn="0 0 180 35";ctrlState=null;oldTheme=null;swipeGuard=_l();viewBox=this.toggleOff;labelColor=null;valueColor=null;ctrlColor="";constructor(){}ngDoCheck(){let e=this.data();e.value!=this.ctrlState&&(this.ctrlState=e.value,this.viewBox=e.value?this.toggleOn:this.toggleOff),e.color!=this.ctrlColor&&(this.ctrlColor=e.color,this.getColors(e.color));let t=this.theme();this.oldTheme!=t&&(this.oldTheme=t,this.getColors(e.color))}onPointerDown(e){this.swipeGuard.onPointerDown(e)}onPointerMove(e){this.swipeGuard.onPointerMove(e)}onPointerUp(e,t){this.swipeGuard.onPointerUp(e)&&this.toggle(t)}onPointerCancel(e){this.swipeGuard.onPointerCancel(e)}toggle(e){let t=this.data();t.value=e,this.toggleClick.emit(t)}getColors(e){switch(e){case"contrast":this.labelColor=this.theme().contrastDim,this.valueColor=this.theme().contrast;break;case"blue":this.labelColor=this.theme().blueDim,this.valueColor=this.theme().blue;break;case"green":this.labelColor=this.theme().greenDim,this.valueColor=this.theme().green;break;case"pink":this.labelColor=this.theme().pinkDim,this.valueColor=this.theme().pink;break;case"orange":this.labelColor=this.theme().orangeDim,this.valueColor=this.theme().orange;break;case"purple":this.labelColor=this.theme().purpleDim,this.valueColor=this.theme().purple;break;case"grey":this.labelColor=this.theme().greyDim,this.valueColor=this.theme().grey;break;case"yellow":this.labelColor=this.theme().yellowDim,this.valueColor=this.theme().yellow;break;default:this.labelColor=this.theme().contrastDim,this.valueColor=this.theme().contrast;break}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["app-svg-boolean-switch"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:24,vars:10,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg"],["id","defs9"],["id","disabled","transform","translate(0,35)",3,"pointerdown","pointermove","pointerup","pointercancel"],["width","180","height","35","id","rect1-5","x","0","y","0","pointer-events","all",2,"display","inline","opacity","0.001","fill","black","fill-opacity","0.001","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","0"],["x","0","y","0","width","175","height","35","viewBox","0 0 175 35"],["id","text1-5","x","47.083984","y","22.636719",2,"text-align","center","font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","14px","font-family","arial","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["transform","translate(6,2)","id","disabledToogleControl"],["width","37.714306","height","22","rx","10.999999","id","rect3-4","x","0","y","5",2,"stroke-width","1.57144","fill","var(--mat-sys-outline)","fill-opacity","1"],["cx","11.5","cy","16","id","circle3-7","r","10",2,"stroke-width","1.5","stroke","black","stroke-opacity","0.2","stroke-dasharray","none"],["id","enabled",3,"pointerdown","pointermove","pointerup","pointercancel"],["width","180","height","35","id","rect1","x","0","y","0","pointer-events","all",2,"display","inline","opacity","0.001","fill","black","fill-opacity","0.001","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","0"],["id","glow","x","-50%","y","-50%","width","200%","height","200%"],["stdDeviation","2.5","result","coloredBlur"],["in","coloredBlur"],["in","SourceGraphic"],["filter","url(#glow)","id","text1","x","47.083984","y","22.636719",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","14px","font-family","arial","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],["transform","translate(6,2)","id","enabledToogleControl"],["filter","url(#glow)","width","37.714306","height","22","rx","10.999999","id","rect3","x","0","y","5",2,"stroke-width","1.57144"],["cx","26.5","cy","16","id","circle3","r","10",2,"stroke-width","1.5","stroke","black","stroke-opacity","0.2","stroke-dasharray","none"]],template:function(t,i){t&1&&(oe(),D(0,"svg",0),ee(1,"defs",1),D(2,"g",2),Jo("pointerdown",function(r){return i.onPointerDown(r)})("pointermove",function(r){return i.onPointerMove(r)})("pointerup",function(r){return i.onPointerUp(r,!0)})("pointercancel",function(r){return i.onPointerCancel(r)}),ee(3,"rect",3),D(4,"svg",4)(5,"text",5),c(6),G()(),D(7,"g",6),ee(8,"rect",7)(9,"circle",8),G()(),D(10,"g",9),Jo("pointerdown",function(r){return i.onPointerDown(r)})("pointermove",function(r){return i.onPointerMove(r)})("pointerup",function(r){return i.onPointerUp(r,!1)})("pointercancel",function(r){return i.onPointerCancel(r)}),ee(11,"rect",10),D(12,"svg",4)(13,"defs")(14,"filter",11),ee(15,"feGaussianBlur",12),D(16,"feMerge"),ee(17,"feMergeNode",13)(18,"feMergeNode",14),G()()(),D(19,"text",15),c(20),G()(),D(21,"g",16),ee(22,"rect",17)(23,"circle",18),G()()()),t&2&&(ie("height",i.dimensions().height)("width",i.dimensions().width)("viewBox",i.viewBox),f(5),ie("fill",i.labelColor),f(),be(" ",i.data().ctrlLabel," "),f(3),ie("fill",i.labelColor),f(10),ie("fill",i.valueColor),f(),be("",i.data().ctrlLabel," "),f(2),ie("fill",i.labelColor),f(),ie("fill",i.valueColor))},encapsulation:2,changeDetection:0})}return n})();function u_(n,a){if(n&1&&O(0,"widget-title",1),n&2){let e=T(),t=En(0);R("text",t==null?null:t.displayName)("color",e.labelColor())}}function m_(n,a){if(n&1){let e=we();d(0,"app-svg-boolean-switch",5),$("toggleClick",function(i){ne(e);let o=T(2);return ae(o.toggle(i))}),u()}if(n&2){let e=T().$implicit,t=T();R("controlData",e)("theme",t.theme())("dimensions",t.ctrlDimensions)}}function h_(n,a){if(n&1){let e=we();d(0,"app-svg-boolean-button",5),$("toggleClick",function(i){ne(e);let o=T(2);return ae(o.toggle(i))}),u()}if(n&2){let e=T().$implicit,t=T();R("controlData",e)("theme",t.theme())("dimensions",t.ctrlDimensions)}}function p_(n,a){if(n&1){let e=we();d(0,"app-svg-boolean-light",5),$("toggleClick",function(i){ne(e);let o=T(2);return ae(o.toggle(i))}),u()}if(n&2){let e=T().$implicit,t=T();R("controlData",e)("theme",t.theme())("dimensions",t.ctrlDimensions)}}function g_(n,a){if(n&1&&(un(0),I(1,m_,1,3,"app-svg-boolean-switch",4)(2,h_,1,3,"app-svg-boolean-button",4)(3,p_,1,3,"app-svg-boolean-light",4),mn()),n&2){let e,t=a.$implicit;f(),P((e=t.type)==="1"?1:e==="2"?2:e==="3"?3:-1)}}function f_(n,a){n&1&&O(0,"div",3)}var _f=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={displayName:"Switch Panel Label",showLabel:!0,filterSelfPaths:!0,paths:[],enableTimeout:!1,dataTimeout:5,color:"contrast",zonesOnlyPaths:!1,putEnable:!0,putMomentary:!1,multiChildCtrls:[]};cdr=A(ki);ngZone=A(Je);runtime=A(xe,{optional:!0});streams=A(Be,{optional:!0});dashboard=A(Tt);signalkRequestsService=A(vi);toast=A(gn);switchControls=w([]);labelColor=w(void 0);noTitleClass=L(()=>this.runtime?.options()?.showLabel===!1?"widgets-container-no-title":"widgets-container");nbCtrl=null;ctrlDimensions={width:0,height:0};skRequestSub=new eo;constructor(){W(()=>{let e=this.theme(),t=this.runtime?.options();!e||!t||z(()=>{this.labelColor.set(Ce(t.color,e).dim)})}),W(()=>{let e=this.runtime?.options();if(!e)return;let t=(e.multiChildCtrls||[]).map(i=>ge(Z({},i),{isNumeric:i.isNumeric??!1}));this.nbCtrl=t.length,z(()=>{this.switchControls.set(t),this.streams&&t.forEach(i=>{let o=e.paths;if(!o?.length)return;let r=o.findIndex(l=>l.pathID===i.pathID);r<0||!o[r]?.path||this.streams.observe(String(r),l=>{let m=l?.data?.value,h=i.isNumeric?[0,1,null].includes(m)?!!m:i.value:m;this.ngZone.run(()=>{this.switchControls.update(v=>{let y=v.findIndex(S=>S.pathID===i.pathID);if(y===-1)return v;let C=ge(Z({},v[y]),{value:h});return[...v.slice(0,y),C,...v.slice(y+1)]}),this.cdr.markForCheck()})})})})})}onResized(e){let t=this.nbCtrl||1,i=e.contentRect.height/t,o=35*e.contentRect.width/180,r=o<i?o:i;this.ctrlDimensions={width:e.contentRect.width,height:r}}toggle(e){let t=this.runtime?.options();if(!t?.putEnable)return;let i=t.paths;if(!i)return;let o=i.findIndex(s=>s.pathID===e.pathID);if(o<0)return;let r=i[o].path;r&&(e.isNumeric?this.signalkRequestsService.putRequest(r,e.value?1:0,this.id()):this.signalkRequestsService.putRequest(r,e.value,this.id()))}ngOnDestroy(){this.skRequestSub?.unsubscribe()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-boolean-switch"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:7,vars:5,consts:[["widgetContainer",""],[3,"text","color"],["kipResizeObserver","",3,"resizeChange"],[1,"widgetOverlay"],[1,"svg-widget",3,"controlData","theme","dimensions"],[1,"svg-widget",3,"toggleClick","controlData","theme","dimensions"]],template:function(t,i){if(t&1&&(Ma(0),I(1,u_,1,2,"widget-title",1),d(2,"div",2,0),$("resizeChange",function(r){return i.onResized(r)}),ye(4,g_,4,1,"ng-container",null,Re),u(),I(6,f_,1,0,"div",3)),t&2){let o=Dn(i.runtime==null?null:i.runtime.options());f(),P(o!=null&&o.showLabel?1:-1),f(),ct(i.noTitleClass()),f(2),Ae(i.switchControls()),f(2),P(i.dashboard.isDashboardStatic()?-1:6)}},dependencies:[oi,wf,Sf,xf,Vt],styles:[".widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20}.widgets-container-no-title[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;padding:3px 0 0;height:100%;width:100%;overflow:hidden;z-index:20}.svg-widget[_ngcontent-%COMP%]{display:flex}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}"],changeDetection:0})}return n})();var Mf=(n,a)=>a.raw.value;function v_(n,a){if(n&1&&O(0,"widget-title",0),n&2){let e=T();R("text",e.displayName())("color",e.accentColor())}}function b_(n,a){if(n&1&&(oe(),O(0,"path")),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("d",t.fullRoundedItemPathD())("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function y_(n,a){if(n&1&&(oe(),O(0,"path")),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("d",t.topRoundedItemPathD())("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function A_(n,a){if(n&1&&(oe(),O(0,"path")),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("d",t.bottomRoundedItemPathD())("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function C_(n,a){if(n&1&&(oe(),O(0,"rect",18)),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("width",t.menuWidth)("height",t.itemHeight)("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function x_(n,a){if(n&1){let e=we();oe(),d(0,"g",15),$("pointerdown",function(i){ne(e);let o=T();return ae(o.onPointerDown(i))})("pointermove",function(i){ne(e);let o=T();return ae(o.onPointerMove(i))})("pointerup",function(i){let o=ne(e).$implicit,r=T();return ae(r.onPointerUp(i,o))})("pointercancel",function(i){ne(e);let o=T();return ae(o.onPointerCancel(i))})("keyup.enter",function(){let i=ne(e).$implicit,o=T();return ae(o.canPut()&&o.selectUi(i))})("keyup.space",function(){let i=ne(e).$implicit,o=T();return ae(o.canPut()&&o.selectUi(i))}),I(1,b_,1,4,":svg:path",16)(2,y_,1,4,":svg:path",16)(3,A_,1,4,":svg:path",16)(4,C_,1,5,":svg:rect",17),d(5,"text"),c(6),u()()}if(n&2){let e=a.$implicit,t=T();Te("cursor",t.canPut()?"pointer":"not-allowed"),dt("is-selected",t.isSelected(e.raw))("is-off",e.raw.isOn===!1),ie("transform","translate(0 "+e.index*(t.itemHeight+t.itemGap)+")")("tabindex",t.canPut()?0:-1)("aria-label",e.label)("aria-pressed",t.isSelected(e.raw))("aria-disabled",!t.canPut()),f(),P(e.index===0&&e.index===t.optionsCount()-1?1:e.index===0?2:e.index===t.optionsCount()-1?3:4),f(4),ct(t.isSelected(e.raw)?"svg-menu-item-current-text":e.raw.isOn===!1?"svg-menu-item-off-text":"svg-menu-item-text"),ie("x",t.menuWidth/2)("y",t.itemHeight/2)("filter",t.isSelected(e.raw)?"url(#glow)":null)("fill",(t.isSelected(e.raw)||e.raw.isOn===!1,t.textColor())),f(),Ut(" ",t.isSelected(e.raw)?"\u2713 ":"","",e.label," ")}}function S_(n,a){if(n&1&&(oe(),O(0,"path")),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("d",t.fullRoundedItemPathD())("filter",t.isSelected(e.raw)?"url(#glow)":null)("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function w_(n,a){if(n&1&&(oe(),O(0,"path")),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("d",t.topRoundedItemPathD())("filter",t.isSelected(e.raw)?"url(#glow)":null)("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function __(n,a){if(n&1&&(oe(),O(0,"path")),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("d",t.bottomRoundedItemPathD())("filter",t.isSelected(e.raw)?"url(#glow)":null)("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function M_(n,a){if(n&1&&(oe(),O(0,"rect",18)),n&2){let e=T().$implicit,t=T();ct(t.isSelected(e.raw)?"svg-menu-item-current":e.raw.isOn===!1?"svg-menu-item-off":"svg-menu-item"),ie("width",t.menuWidth)("height",t.itemHeight)("filter",t.isSelected(e.raw)?"url(#glow)":null)("fill",t.isSelected(e.raw)?t.accentColor():(e.raw.isOn===!1,t.accentDim()))}}function T_(n,a){if(n&1){let e=we();oe(),d(0,"g",15),$("pointerdown",function(i){ne(e);let o=T();return ae(o.onPointerDown(i))})("pointermove",function(i){ne(e);let o=T();return ae(o.onPointerMove(i))})("pointerup",function(i){let o=ne(e).$implicit,r=T();return ae(r.onPointerUp(i,o))})("pointercancel",function(i){ne(e);let o=T();return ae(o.onPointerCancel(i))})("keyup.enter",function(){let i=ne(e).$implicit,o=T();return ae(o.canPut()&&o.selectUi(i))})("keyup.space",function(){let i=ne(e).$implicit,o=T();return ae(o.canPut()&&o.selectUi(i))}),I(1,S_,1,5,":svg:path",16)(2,w_,1,5,":svg:path",16)(3,__,1,5,":svg:path",16)(4,M_,1,6,":svg:rect",17),d(5,"text"),c(6),u()()}if(n&2){let e=a.$implicit,t=T();Te("cursor",t.canPut()?"pointer":"not-allowed"),dt("is-selected",t.isSelected(e.raw))("is-off",e.raw.isOn===!1),ie("transform","translate(0 "+e.index*(t.itemHeight+t.itemGap)+")")("tabindex",t.canPut()?0:-1)("aria-label",e.label)("aria-pressed",t.isSelected(e.raw))("aria-disabled",!t.canPut()),f(),P(e.index===0&&e.index===t.optionsCount()-1?1:e.index===0?2:e.index===t.optionsCount()-1?3:4),f(4),ct(t.isSelected(e.raw)?"svg-menu-item-current-text":e.raw.isOn===!1?"svg-menu-item-off-text":"svg-menu-item-text"),ie("x",t.menuWidth/2)("y",t.itemHeight/2)("filter",t.isSelected(e.raw)?"url(#glow)":null)("fill",(t.isSelected(e.raw)||e.raw.isOn===!1,t.textColor())),f(),Ut(" ",t.isSelected(e.raw)?"\u2713 ":"","",e.label," ")}}function k_(n,a){n&1&&O(0,"div",14)}var Tf=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={displayName:"Switch Label",showLabel:!0,filterSelfPaths:!0,paths:{controlPath:{description:"Multi-state control path",path:null,source:null,pathType:"multiple",supportsPut:!0,isPathConfigurable:!0,pathRequired:!0,showPathSkUnitsFilter:!1,pathSkUnitsFilter:null,showConvertUnitTo:!1,convertUnitTo:null,sampleTime:500}},enableTimeout:!1,dataTimeout:5,color:"contrast"};runtime=A(xe);streams=A(Be);meta=A(bi);signalkRequestsService=A(vi);dashboard=A(Tt);toast=A(gn);skRequest=Ii(this.signalkRequestsService.subscribeRequest(),{initialValue:null});cfg=L(()=>this.runtime.options());displayName=L(()=>this.cfg()?.displayName);showLabel=L(()=>this.cfg()?.showLabel);controlPath=L(()=>this.getControlPath(this.cfg()));accentColor=w(void 0);accentDim=w(void 0);accentDimmer=w(void 0);textColor=w(void 0);textDim=w(void 0);textDimmer=w(void 0);currentValue=w(null);sortedOptions=L(()=>{let e=this.meta.possibleValues();if(!e.length)return[];let t=e.map(i=>({raw:i,label:i.title||i.abbrev||String(i.value),comparable:this.toComparable(i.value)}));return t.sort((i,o)=>{let r=i.comparable,s=o.comparable;return r.kind==="num"&&s.kind==="num"?r.value-s.value:r.kind==="str"&&s.kind==="str"?r.value.localeCompare(s.value):r.kind==="num"?-1:1}),t.map((i,o)=>ge(Z({},i),{index:o}))});menuWidth=220;itemHeight=50;itemGap=1;svgPadding=Math.max(1,Math.round(this.itemHeight*.2));optionsCount=L(()=>this.sortedOptions().length);menuHeight=L(()=>{let e=this.sortedOptions().length;return e<=0?0:e*this.itemHeight+(e-1)*this.itemGap});hasOptions=L(()=>this.meta.possibleValues().length>0);selectedValue=L(()=>this.currentValue());canPut=L(()=>this.meta.supportsPut());swipeGuard=_l();unselectedOptions=L(()=>this.sortedOptions().filter(e=>!this.isSelected(e.raw)));selectedOptions=L(()=>this.sortedOptions().filter(e=>this.isSelected(e.raw)));fullRoundedItemPathD=L(()=>this.buildRoundedRectPath(this.menuWidth,this.itemHeight,this.cornerRadius,!0,!0));topRoundedItemPathD=L(()=>this.buildRoundedRectPath(this.menuWidth,this.itemHeight,this.cornerRadius,!0,!1));bottomRoundedItemPathD=L(()=>this.buildRoundedRectPath(this.menuWidth,this.itemHeight,this.cornerRadius,!1,!0));cornerRadius=7;constructor(){W(()=>{let e=this.theme(),t=this.cfg().color;!e||!t||z(()=>{this.accentColor.set(Ce(t,e).color),this.accentDim.set(Ce(t,e).dim),this.accentDimmer.set(Ce(t,e).dimmer),t==="contrast"?(this.textColor.set(e.background),this.textDim.set(e.contrastDim),this.textDimmer.set(e.contrastDimmer)):(this.textColor.set(e.contrast),this.textDim.set(Ce(t,e).dim),this.textDimmer.set(Ce(t,e).dimmer))})}),W(()=>{if(!this.controlPath()){this.currentValue.set(null);return}z(()=>{this.streams.observe("controlPath",t=>{this.currentValue.set(t?.data?.value??null)}),this.meta.observe("controlPath")})})}select(e){let t=this.getControlPath(this.cfg());t&&this.signalkRequestsService.putRequest(t,e.value,this.id())}selectUi(e){this.select(e.raw)}onPointerDown(e){this.canPut()&&this.swipeGuard.onPointerDown(e)}onPointerMove(e){this.canPut()&&this.swipeGuard.onPointerMove(e)}onPointerUp(e,t){this.canPut()&&this.swipeGuard.onPointerUp(e)&&this.selectUi(t)}onPointerCancel(e){this.swipeGuard.onPointerCancel(e)}getControlPath(e){let t=e?.paths;return!t||Array.isArray(t)?null:t.controlPath?.path??null}isSelected(e){let t=this.selectedValue();return typeof e.value=="number"&&typeof t=="string"?e.value===Number(t):typeof e.value=="string"&&typeof t=="number"?Number(e.value)===t||e.value===String(t):Object.is(e.value,t)}toComparable(e){if(typeof e=="number"&&Number.isFinite(e))return{kind:"num",value:e};if(typeof e=="boolean")return{kind:"num",value:e?1:0};if(typeof e=="string"){let t=e.trim();if(/^-?\d+(\.\d+)?$/.test(t)){let i=Number(t);if(Number.isFinite(i))return{kind:"num",value:i}}return{kind:"str",value:t}}return{kind:"str",value:String(e)}}buildRoundedRectPath(e,t,i,o,r){let s=Math.max(0,e),l=Math.max(0,t),m=Math.max(0,Math.min(i,s/2,l/2));return s===0||l===0?"":m===0?`M0 0H${s}V${l}H0Z`:o&&r?[`M${m} 0`,`H${s-m}`,`A${m} ${m} 0 0 1 ${s} ${m}`,`V${l-m}`,`A${m} ${m} 0 0 1 ${s-m} ${l}`,`H${m}`,`A${m} ${m} 0 0 1 0 ${l-m}`,`V${m}`,`A${m} ${m} 0 0 1 ${m} 0`,"Z"].join(""):o?[`M0 ${m}`,`A${m} ${m} 0 0 1 ${m} 0`,`H${s-m}`,`A${m} ${m} 0 0 1 ${s} ${m}`,`V${l}`,"H0","Z"].join(""):r?["M0 0",`H${s}`,`V${l-m}`,`A${m} ${m} 0 0 1 ${s-m} ${l}`,`H${m}`,`A${m} ${m} 0 0 1 0 ${l-m}`,"V0","Z"].join(""):`M0 0H${s}V${l}H0Z`}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-multi-state-switch"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:23,vars:6,consts:[[3,"text","color"],["role","group",1,"widgets-container"],["preserveAspectRatio","xMidYMid meet","role","presentation",1,"svg-menu"],["id","glow","x","-50%","y","-50%","width","200%","height","200%"],["stdDeviation","5","result","coloredBlur"],["in","coloredBlur"],["in","SourceGraphic"],["id","focus-inner-ring","x","0","y","0","width","100%","height","100%","color-interpolation-filters","sRGB"],["in","SourceAlpha","operator","erode","radius","2","result","eroded"],["in","SourceAlpha","in2","eroded","operator","out","result","border"],["flood-color","#ffffff","flood-opacity","0.9","result","ringColor"],["in","ringColor","in2","border","operator","in","result","ring"],["in","ring"],["role","button",1,"svg-menu-item-group",3,"is-selected","is-off","cursor"],[1,"widgetOverlay"],["role","button",1,"svg-menu-item-group",3,"pointerdown","pointermove","pointerup","pointercancel","keyup.enter","keyup.space"],[3,"class"],["x","0","y","0",3,"class"],["x","0","y","0"]],template:function(t,i){t&1&&(I(0,v_,1,2,"widget-title",0),d(1,"div",1),oe(),d(2,"svg",2)(3,"defs")(4,"filter",3),O(5,"feGaussianBlur",4),d(6,"feMerge"),O(7,"feMergeNode",5)(8,"feMergeNode",6),u()(),d(9,"filter",7),O(10,"feMorphology",8)(11,"feComposite",9)(12,"feFlood",10)(13,"feComposite",11),d(14,"feMerge"),O(15,"feMergeNode",6)(16,"feMergeNode",12),u()()(),d(17,"g"),ye(18,x_,7,20,":svg:g",13,Mf),ye(20,T_,7,20,":svg:g",13,Mf),u()()(),I(22,k_,1,0,"div",14)),t&2&&(P(i.showLabel()?0:-1),f(),ie("aria-label",i.displayName()),f(),ie("viewBox","0 0 "+(i.menuWidth+i.svgPadding*2)+" "+((i.menuHeight()||i.itemHeight)+i.svgPadding*2))("aria-label",i.displayName()),f(15),ie("transform","translate("+i.svgPadding+" "+i.svgPadding+")"),f(),Ae(i.unselectedOptions()),f(2),Ae(i.selectedOptions()),f(2),P(i.dashboard.isDashboardStatic()?-1:22))},dependencies:[Vt],styles:["[_nghost-%COMP%]{display:block;height:100%}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}.widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;padding:2px}.svg-menu[_ngcontent-%COMP%]{width:100%;height:100%;display:block;background:transparent;border-radius:12px;z-index:20;font-family:Roboto;font-size:1.3rem;font-weight:700;text-anchor:middle;text-align:center;alignment-baseline:middle}.svg-menu-item-current[_ngcontent-%COMP%]{stroke:var(--mat-sys-on-background);stroke-width:3px;stroke-dasharray:none;stroke-opacity:1}.svg-menu-item[_ngcontent-%COMP%]{fill:var(--mat-sys-outline);stroke:#000;stroke-width:2px;stroke-dasharray:none;stroke-opacity:.2}.svg-menu-item-off[_ngcontent-%COMP%]{stroke:#000;stroke-width:2;stroke-dasharray:none;stroke-opacity:.2}.svg-menu-item-current-text[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;text-anchor:middle;dominant-baseline:middle;alignment-baseline:middle}.svg-menu-item-text[_ngcontent-%COMP%], .svg-menu-item-off-text[_ngcontent-%COMP%]{font-weight:600;text-anchor:middle;dominant-baseline:middle;alignment-baseline:middle}.svg-menu-item-group[_ngcontent-%COMP%]:focus{outline:none}.svg-menu-item-group[_ngcontent-%COMP%]:focus-visible :is(rect[_ngcontent-%COMP%], path[_ngcontent-%COMP%]){filter:url(#focus-inner-ring)}"],changeDetection:0})}return n})();var kf=(()=>{class n{data=x(null,{alias:"controlData"});theme=x(null);dimensions=x.required();toggleClick=ft();ctrlLabelColor=w(null);ctrlStateColor=w(null);messageTxtColor=w(null);shouldEmergencyBlink=L(()=>(this.data()?.notificationState??"").toLowerCase()==="emergency");shouldAlarmBlink=L(()=>(this.data()?.notificationState??"").toLowerCase()==="alarm");constructor(){W(()=>{let e=this.data(),t=this.theme();z(()=>{switch(e.notificationState){case J.Emergency:this.ctrlStateColor.set(t.zoneEmergency),this.messageTxtColor.set(t.background);break;case J.Alarm:this.ctrlStateColor.set(t.zoneAlarm),this.messageTxtColor.set(t.background);break;case J.Warn:this.ctrlStateColor.set(t.zoneWarn),this.messageTxtColor.set(t.background);break;case J.Alert:this.ctrlStateColor.set(t.zoneAlert),this.messageTxtColor.set(t.background);break;default:this.ctrlStateColor.set(t.background),this.messageTxtColor.set(Ce(e.color,t).dim);break}this.ctrlLabelColor.set(Ce(e.color,t).color)})})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["app-svg-zone-states"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:12,vars:14,consts:[["viewBox","0 0 180 75","version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg"],["id","defs9"],["id","zoneStateCtrl"],["id","touchRect","width","180","height","75","x","0","y","0","pointer-events","all",2,"display","inline","opacity","1","fill","transparent","fill-opacity","1","stroke","none","stroke-width","0","stroke-dasharray","none","stroke-opacity","0"],["x","0","y","0","width","180","height","20"],["xmlns","http://www.w3.org/1999/xhtml",2,"width","180px","height","20px","display","flex","align-items","center","justify-content","center","font-weight","bold","font-size","14px","line-height","1.1","text-align","center","overflow","hidden","word-break","break-word","white-space","normal"],["id","outlineRect","x","6","y","22","width","168","height","43","rx","3.5","fill","none",2,"display","inline","opacity","1","mix-blend-mode","normals","stroke-width","1","stroke-dasharray","none","stroke-opacity","0.65"],["id","innerRect","x","7","y","23","width","166","height","41","rx","3.5",2,"display","inline","opacity","1","mix-blend-mode","normal","stroke","none","stroke-width","0"],["x","7","y","23","width","166","height","41"],["xmlns","http://www.w3.org/1999/xhtml",2,"width","166px","height","41px","display","flex","align-items","center","justify-content","center","font-weight","regular","font-size","12px","line-height","1.1","text-align","center","overflow","hidden","word-break","break-word","white-space","normal","padding","2px"]],template:function(t,i){t&1&&(oe(),D(0,"svg",0),ee(1,"defs",1),D(2,"g",2),ee(3,"rect",3),D(4,"foreignObject",4),Ue(),D(5,"div",5),c(6),G()(),oe(),ee(7,"rect",6)(8,"rect",7),D(9,"foreignObject",8),Ue(),D(10,"div",9),c(11),G()()()()),t&2&&(ie("height",i.dimensions().height)("width",i.dimensions().width),f(5),Te("color",i.ctrlLabelColor()),f(),be(" ",i.data().ctrlLabel," "),f(),ie("stroke",i.ctrlLabelColor()),f(),dt("emergency-blink-fill",i.shouldEmergencyBlink())("alarm-blink-fill",i.shouldAlarmBlink()),ie("fill",i.ctrlStateColor()),f(2),Te("color",i.messageTxtColor()),f(),be(" ",i.data().notificationMessage," "))},styles:["@keyframes _ngcontent-%COMP%_AlarmBlinkFill{0%,49%{opacity:1}50%,to{opacity:.6}}.alarm-blink-fill[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_AlarmBlinkFill 1s step-end infinite}@keyframes _ngcontent-%COMP%_EmergencyBlinkFill{0%,49%{opacity:1}50%,to{opacity:.1}}.emergency-blink-fill[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_EmergencyBlinkFill .3s step-end infinite}"],changeDetection:0})}return n})();function D_(n,a){if(n&1&&O(0,"widget-title",1),n&2){let e=T(),t=En(0);R("text",t==null?null:t.displayName)("color",e.labelColor())}}function E_(n,a){if(n&1&&O(0,"app-svg-zone-states",4),n&2){let e=T().$implicit,t=T();R("controlData",e)("theme",t.theme())("dimensions",t.ctrlDimensions())}}function I_(n,a){if(n&1&&(un(0),I(1,E_,1,3,"app-svg-zone-states",4),mn()),n&2){let e,t=a.$implicit;f(),P((e=t.type)==="4"?1:-1)}}function P_(n,a){n&1&&O(0,"div",3)}var Df=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={displayName:"Zones State Panel Label",showLabel:!0,filterSelfPaths:!0,paths:[],enableTimeout:!1,dataTimeout:5,color:"contrast",putEnable:!1,zonesOnlyPaths:!0,putMomentary:!1,multiChildCtrls:[]};cdr=A(ki);ngZone=A(Je);runtime=A(xe,{optional:!0});notificationsService=A(sm);dashboard=A(Tt);notifications=Ii(this.notificationsService.observeNotifications());zonesControls=w([]);labelColor=w(void 0);noTitleClass=L(()=>this.runtime?.options()?.showLabel===!1?"widgets-container-no-title":"widgets-container");pathIdToNotificationPath=new Map;hostSize=w(null);ctrlDimensions=L(()=>{let e=this.hostSize();if(!e)return{width:0,height:0};let t=Math.max(1,this.zonesControls().length),i=e.height/t,o=75*e.width/180,r=Math.min(o,i);return{width:e.width,height:r}});constructor(){W(()=>{let e=this.theme(),t=this.runtime?.options();!e||!t||(z(()=>{this.labelColor.set(Ce(t.color,e).dim)}),this.cdr.markForCheck())}),W(()=>{let e=this.runtime?.options();e&&(z(()=>{let t=(e.multiChildCtrls||[]).map(o=>ge(Z({},o),{isNumeric:o.isNumeric??!1}));this.zonesControls.set(t);let i=e.paths;if(i?.length){this.pathIdToNotificationPath.clear();for(let o of i){if(!o?.pathID||!o?.path)continue;let r=o.path.replace(/^self(\.|$)/,"notifications$1");this.pathIdToNotificationPath.set(o.pathID,r)}this.applyNotificationsSnapshot(this.notifications())}}),this.cdr.markForCheck())}),W(()=>{let e=this.notifications();z(()=>this.applyNotificationsSnapshot(e))})}applyNotificationsSnapshot(e){if(!this.pathIdToNotificationPath.size||!e?.length)return;let t=new Map;for(let i of e)i?.path&&t.set(i.path,i);this.ngZone.run(()=>{let i=!1;this.zonesControls.update(o=>{let r=null;for(let s=0;s<o.length;s++){let l=o[s],m=this.pathIdToNotificationPath.get(l.pathID),h=m?t.get(m):void 0;if(!h)continue;let v=h.value?.state,y=h.value?.message;l.notificationState===v&&l.notificationMessage===y||(r||(r=[...o]),r[s]=ge(Z({},l),{notificationState:v,notificationMessage:y}),i=!0)}return r??o}),i&&this.cdr.markForCheck()})}onResized(e){this.hostSize.set({width:e.contentRect.width,height:e.contentRect.height}),this.cdr.markForCheck()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-zones-state-panel"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:7,vars:5,consts:[["widgetContainer",""],[3,"text","color"],["kipResizeObserver","",3,"resizeChange"],[1,"widgetOverlay"],[1,"svg-widget",3,"controlData","theme","dimensions"]],template:function(t,i){if(t&1&&(Ma(0),I(1,D_,1,2,"widget-title",1),d(2,"div",2,0),$("resizeChange",function(r){return i.onResized(r)}),ye(4,I_,2,1,"ng-container",null,Re),u(),I(6,P_,1,0,"div",3)),t&2){let o=Dn(i.runtime==null?null:i.runtime.options());f(),P(o!=null&&o.showLabel?1:-1),f(),ct(i.noTitleClass()),f(2),Ae(i.zonesControls()),f(2),P(i.dashboard.isDashboardStatic()?-1:6)}},dependencies:[oi,kf,Vt],styles:[".widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20}.widgets-container-no-title[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;padding:6px 0 0;height:100%;width:100%;overflow:hidden;z-index:20}.svg-widget[_ngcontent-%COMP%]{display:flex}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}"],changeDetection:0})}return n})();var Ef="mat-badge-content",R_=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["ng-component"]],decls:0,vars:0,template:function(t,i){},styles:[`.mat-badge{position:relative}.mat-badge.mat-badge{overflow:visible}.mat-badge-content{position:absolute;text-align:center;display:inline-block;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box;pointer-events:none;background-color:var(--mat-badge-background-color, var(--mat-sys-error));color:var(--mat-badge-text-color, var(--mat-sys-on-error));font-family:var(--mat-badge-text-font, var(--mat-sys-label-small-font));font-weight:var(--mat-badge-text-weight, var(--mat-sys-label-small-weight));border-radius:var(--mat-badge-container-shape, var(--mat-sys-corner-full))}.mat-badge-above .mat-badge-content{bottom:100%}.mat-badge-below .mat-badge-content{top:100%}.mat-badge-before .mat-badge-content{right:100%}[dir=rtl] .mat-badge-before .mat-badge-content{right:auto;left:100%}.mat-badge-after .mat-badge-content{left:100%}[dir=rtl] .mat-badge-after .mat-badge-content{left:auto;right:100%}@media(forced-colors: active){.mat-badge-content{outline:solid 1px;border-radius:0}}.mat-badge-disabled .mat-badge-content{background-color:var(--mat-badge-disabled-state-background-color, color-mix(in srgb, var(--mat-sys-error) 38%, transparent));color:var(--mat-badge-disabled-state-text-color, var(--mat-sys-on-error))}.mat-badge-hidden .mat-badge-content{display:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:var(--mat-badge-legacy-small-size-container-size, unset);height:var(--mat-badge-legacy-small-size-container-size, unset);min-width:var(--mat-badge-small-size-container-size, 6px);min-height:var(--mat-badge-small-size-container-size, 6px);line-height:var(--mat-badge-small-size-line-height, 6px);padding:var(--mat-badge-small-size-container-padding, 0);font-size:var(--mat-badge-small-size-text-size, 0);margin:var(--mat-badge-small-size-container-offset, -6px 0)}.mat-badge-small.mat-badge-overlap .mat-badge-content{margin:var(--mat-badge-small-size-container-overlap-offset, -6px)}.mat-badge-medium .mat-badge-content{width:var(--mat-badge-legacy-container-size, unset);height:var(--mat-badge-legacy-container-size, unset);min-width:var(--mat-badge-container-size, 16px);min-height:var(--mat-badge-container-size, 16px);line-height:var(--mat-badge-line-height, 16px);padding:var(--mat-badge-container-padding, 0 4px);font-size:var(--mat-badge-text-size, var(--mat-sys-label-small-size));margin:var(--mat-badge-container-offset, -12px 0)}.mat-badge-medium.mat-badge-overlap .mat-badge-content{margin:var(--mat-badge-container-overlap-offset, -12px)}.mat-badge-large .mat-badge-content{width:var(--mat-badge-legacy-large-size-container-size, unset);height:var(--mat-badge-legacy-large-size-container-size, unset);min-width:var(--mat-badge-large-size-container-size, 16px);min-height:var(--mat-badge-large-size-container-size, 16px);line-height:var(--mat-badge-large-size-line-height, 16px);padding:var(--mat-badge-large-size-container-padding, 0 4px);font-size:var(--mat-badge-large-size-text-size, var(--mat-sys-label-small-size));margin:var(--mat-badge-large-size-container-offset, -12px 0)}.mat-badge-large.mat-badge-overlap .mat-badge-content{margin:var(--mat-badge-large-size-container-overlap-offset, -12px)}
45
+ `],encapsulation:2,changeDetection:0})}return n})(),TG=(()=>{class n{_ngZone=A(Je);_elementRef=A(nt);_ariaDescriber=A(eu);_renderer=A(Xr);_animationsDisabled=pn();_idGenerator=A(Ta);get color(){return this._color}set color(e){this._setColor(e),this._color=e}_color="primary";overlap=!0;disabled=!1;position="above after";get content(){return this._content}set content(e){this._updateRenderedContent(e)}_content;get description(){return this._description}set description(e){this._updateDescription(e)}_description;size="medium";hidden=!1;_badgeElement;_inlineBadgeDescription;_isInitialized=!1;_interactivityChecker=A(Zc);_document=A(Rc);constructor(){let e=A(os);e.load(R_),e.load(Kc)}isAbove(){return this.position.indexOf("below")===-1}isAfter(){return this.position.indexOf("before")===-1}getBadgeElement(){return this._badgeElement}ngOnInit(){this._clearExistingBadges(),this.content&&!this._badgeElement&&(this._badgeElement=this._createBadgeElement(),this._updateRenderedContent(this.content)),this._isInitialized=!0}ngAfterViewInit(){}ngOnDestroy(){this._renderer.destroyNode&&(this._renderer.destroyNode(this._badgeElement),this._inlineBadgeDescription?.remove()),this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this.description)}_isHostInteractive(){return this._interactivityChecker.isFocusable(this._elementRef.nativeElement,{ignoreVisibility:!0})}_createBadgeElement(){let e=this._renderer.createElement("span"),t="mat-badge-active";return e.setAttribute("id",this._idGenerator.getId("mat-badge-content-")),e.setAttribute("aria-hidden","true"),e.classList.add(Ef),this._animationsDisabled&&e.classList.add("_mat-animation-noopable"),this._elementRef.nativeElement.appendChild(e),typeof requestAnimationFrame=="function"&&!this._animationsDisabled?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{e.classList.add(t)})}):e.classList.add(t),e}_updateRenderedContent(e){let t=`${e??""}`.trim();this._isInitialized&&t&&!this._badgeElement&&(this._badgeElement=this._createBadgeElement()),this._badgeElement&&(this._badgeElement.textContent=t),this._content=t}_updateDescription(e){this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this.description),(!e||this._isHostInteractive())&&this._removeInlineDescription(),this._description=e,this._isHostInteractive()?this._ariaDescriber.describe(this._elementRef.nativeElement,e):this._updateInlineDescription()}_updateInlineDescription(){this._inlineBadgeDescription||(this._inlineBadgeDescription=this._document.createElement("span"),this._inlineBadgeDescription.classList.add("cdk-visually-hidden")),this._inlineBadgeDescription.textContent=this.description,this._badgeElement?.appendChild(this._inlineBadgeDescription)}_removeInlineDescription(){this._inlineBadgeDescription?.remove(),this._inlineBadgeDescription=void 0}_setColor(e){let t=this._elementRef.nativeElement.classList;t.remove(`mat-badge-${this._color}`),e&&t.add(`mat-badge-${e}`)}_clearExistingBadges(){let e=this._elementRef.nativeElement.querySelectorAll(`:scope > .${Ef}`);for(let t of Array.from(e))t!==this._badgeElement&&t.remove()}static \u0275fac=function(t){return new(t||n)};static \u0275dir=Gt({type:n,selectors:[["","matBadge",""]],hostAttrs:[1,"mat-badge"],hostVars:20,hostBindings:function(t,i){t&2&&dt("mat-badge-overlap",i.overlap)("mat-badge-above",i.isAbove())("mat-badge-below",!i.isAbove())("mat-badge-before",!i.isAfter())("mat-badge-after",i.isAfter())("mat-badge-small",i.size==="small")("mat-badge-medium",i.size==="medium")("mat-badge-large",i.size==="large")("mat-badge-hidden",i.hidden||!i.content)("mat-badge-disabled",i.disabled)},inputs:{color:[0,"matBadgeColor","color"],overlap:[2,"matBadgeOverlap","overlap",It],disabled:[2,"matBadgeDisabled","disabled",It],position:[0,"matBadgePosition","position"],content:[0,"matBadge","content"],description:[0,"matBadgeDescription","description"],size:[0,"matBadgeSize","size"],hidden:[2,"matBadgeHidden","hidden",It]}})}return n})(),If=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=cn({type:n});static \u0275inj=ln({imports:[Qc,Yn]})}return n})();var N_=["rotatingDial"],O_=["awaIndicator"],V_=["rudderStarboardRect"],L_=["rudderPortRect"],Pf=(()=>{class n{rotatingDial=he.required("rotatingDial");awaIndicator=he.required("awaIndicator");rudderStarboardRect=he.required("rudderStarboardRect");rudderPortRect=he.required("rudderPortRect");apMode=x("off-line");targetPilotHeadingTrue=x.required();autopilotTarget=x.required();courseXte=x.required();compassHeading=x.required();headingDirectionTrue=x.required();appWindAngle=x.required();rudderAngle=x.required();compassAngle=w(0);awaAngle=w(0);prevCompassAngle=0;prevAwaAngle=0;compassInitialized=!1;awaInitialized=!1;rudderInitialized=!1;lastRudderSigned=Number.NaN;oldRudderPrtAngle=0;newRudderPrtAngle=0;oldRudderStbAngle=0;newRudderStbAngle=0;apModeValue=w("");apModeValueAnnotation=w("");apModeValueDirection=w("");lockedMode=L(()=>{let e=this.apMode();return e==="auto"||e==="compass"?"Heading Hold":e==="gps"?"GPS Hold":e==="route"||e==="nav"?"Track":e==="wind"?"Wind Hold":e==="true wind"?"Wind True Hold":e==="standby"?"Standby":"Off-line"});lockedHdg=L(()=>{let e=this.autopilotTarget();return Number.isFinite(e)?this.roundDeg(e):null});lockedHdgAnnotation=L(()=>{let e=this.apMode();if(["route","auto","gps","nav"].includes(e))return this.targetPilotHeadingTrue()?"True":"Mag";if(["wind","true wind"].includes(e)){let t=this.lockedHdg()??null;return t===null?"":t>0?"Stbd":"Port"}return""});hdgDirectionTrue=L(()=>this.headingDirectionTrue()?"T":"M");animationFrames=new WeakMap;ANIMATION_DURATION=1e3;DEG_TO_PX=16.66666667;ROT_CENTER=[500,560.061];ngZone=A(Je);roundDeg(e){return Math.round(e)}setRotationImmediate(e,t){e.setAttribute("transform",`rotate(${t} ${this.ROT_CENTER[0]} ${this.ROT_CENTER[1]})`)}setRudderWidthImmediate(e,t){e.setAttribute("width",`${Math.max(0,t)}`)}constructor(){W(()=>{let e=this.compassHeading();if(!Number.isFinite(e))return;let t=this.roundDeg(e);z(()=>{let i=this.prevCompassAngle,o=!this.compassInitialized;if(!this.compassInitialized)this.prevCompassAngle=t,this.compassInitialized=!0;else{if(i===t)return;this.prevCompassAngle=t}this.compassAngle.set(t);let r=this.rotatingDial()?.nativeElement;r&&(o||i===t?this.setRotationImmediate(r,-t):ai(r,-i,-t,this.ANIMATION_DURATION,void 0,this.animationFrames,this.ROT_CENTER,this.ngZone))})}),W(()=>{let e=this.appWindAngle();if(!Number.isFinite(e))return;let i=(this.roundDeg(e)+360)%360;z(()=>{let o=this.prevAwaAngle,r=!this.awaInitialized;if(!this.awaInitialized)this.prevAwaAngle=i,this.awaInitialized=!0;else{if(o===i)return;this.prevAwaAngle=i}this.awaAngle.set(i);let s=this.awaIndicator()?.nativeElement;s&&(r||o===i?this.setRotationImmediate(s,i):ai(s,o,i,this.ANIMATION_DURATION,void 0,this.animationFrames,this.ROT_CENTER,this.ngZone))})}),W(()=>{let e=this.rudderAngle();Number.isFinite(e)&&z(()=>{this.updateRudderAngle(-e)})}),W(()=>{let e=this.apMode(),t=this.appWindAngle(),i=Number.isFinite(t)?this.roundDeg(t):0,o=this.courseXte();z(()=>{switch(e){case"auto":case"route":{let r,s,l;o<0?l=" Port":o>0?l=" Stbd":l="",o=Math.abs(o),o>185?(r=(o/1852).toFixed(1),s=" nm"):(r=o.toFixed(0),s=" m"),this.apModeValueAnnotation.set(s),this.apModeValue.set(r),this.apModeValueDirection.set(l);break}case"standby":this.apModeValueAnnotation.set(""),this.apModeValue.set(""),this.apModeValueDirection.set("");break;case"wind":this.apModeValueAnnotation.set(i?i>0?"S":"P":""),this.apModeValue.set(Math.abs(i)+"\xB0"),this.apModeValueDirection.set("");break;default:this.apModeValueAnnotation.set(""),this.apModeValue.set(""),this.apModeValueDirection.set("");break}})})}updateRudderAngle(e){if(!Number.isFinite(e))return;let t=this.roundDeg(e);if(this.lastRudderSigned===t)return;this.lastRudderSigned=t;let o=Math.min(Math.abs(t),30)*this.DEG_TO_PX,r=this.rudderStarboardRect().nativeElement,s=this.rudderPortRect().nativeElement;if(!this.rudderInitialized){this.rudderInitialized=!0,t<=0?(this.setRudderWidthImmediate(r,o),this.setRudderWidthImmediate(s,0),this.oldRudderStbAngle=o,this.oldRudderPrtAngle=0):(this.setRudderWidthImmediate(s,o),this.setRudderWidthImmediate(r,0),this.oldRudderPrtAngle=o,this.oldRudderStbAngle=0);return}t<=0?(hr(r,this.oldRudderStbAngle,o,this.ANIMATION_DURATION,void 0,this.animationFrames,this.ngZone),hr(s,this.oldRudderPrtAngle,0,this.ANIMATION_DURATION,void 0,this.animationFrames,this.ngZone),this.oldRudderStbAngle=o,this.oldRudderPrtAngle=0):(hr(s,this.oldRudderPrtAngle,o,this.ANIMATION_DURATION,void 0,this.animationFrames,this.ngZone),hr(r,this.oldRudderStbAngle,0,this.ANIMATION_DURATION,void 0,this.animationFrames,this.ngZone),this.oldRudderPrtAngle=o,this.oldRudderStbAngle=0)}ngOnDestroy(){let e=[this.rotatingDial(),this.awaIndicator(),this.rudderPortRect(),this.rudderStarboardRect()];for(let t of e){let i=t?.nativeElement;if(!i)continue;let o=this.animationFrames.get(i);o&&cancelAnimationFrame(o),this.animationFrames.delete(i)}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["app-svg-autopilot"]],viewQuery:function(t,i){t&1&&_e(i.rotatingDial,N_,5)(i.awaIndicator,O_,5)(i.rudderStarboardRect,V_,5)(i.rudderPortRect,L_,5),t&2&&Me(4)},inputs:{apMode:[1,"apMode"],targetPilotHeadingTrue:[1,"targetPilotHeadingTrue"],autopilotTarget:[1,"autopilotTarget"],courseXte:[1,"courseXte"],compassHeading:[1,"compassHeading"],headingDirectionTrue:[1,"headingDirectionTrue"],appWindAngle:[1,"appWindAngle"],rudderAngle:[1,"rudderAngle"]},decls:123,vars:17,consts:[["rotatingDial",""],["awaIndicator",""],["rudderStarboardRect",""],["rudderPortRect",""],["viewBox","0 0 1000 500","preserveAspectRatio","xMidYMid meet"],["id","compassDial"],["id","fixedDial"],["d","M 499.99997,70.521 A 489.47916,489.47916 0 0 0 10.520805,560.00017 489.47916,489.47916 0 0 0 499.99997,1049.4793 489.47916,489.47916 0 0 0 989.47913,560.00017 489.47916,489.47916 0 0 0 499.99997,70.521 Z m 0,132.29166 a 357.1875,357.1875 0 0 1 357.18749,357.1875 357.1875,357.1875 0 0 1 -357.18749,357.18749 357.1875,357.1875 0 0 1 -357.1875,-357.18749 357.1875,357.1875 0 0 1 357.1875,-357.1875 z",1,"fixed-dial-background",2,"display","inline","stroke","none"],["d","M 93.283801,325.18249 A 469.63541,469.63541 0 0 1 339.37522,118.68726",1,"port",2,"display","inline","fill","none","stroke-width","39.6875","stroke-linecap","butt","stroke-linejoin","round","stroke-miterlimit","0"],["d","M 660.62476,118.68725 A 469.63541,469.63541 0 0 1 906.71619,325.18247",1,"starboard",2,"display","inline","fill","none","stroke-width","39.6875","stroke-linecap","butt","stroke-linejoin","round","stroke-miterlimit","0"],[2,"display","inline"],["transform","translate(0,59.999714)"],["d","m 416.35095,19.837399 2.78142,15.77426","id","path199",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 334.23173,41.658798 5.47834,15.051615","id","path200",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 260.27336,81.806174 12.55151,21.739856","id","path37",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 187.44581,126.00035 10.29591,12.2702","id","path197",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 127.23918,185.95785 12.27019,10.29591","id","path198",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 83.252815,257.66724 21.739865,12.55151","id","path166",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 42.289518,332.39273 15.05162,5.47835","id","path195",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 20.127799,414.42077 15.774251,2.78142","id","path196",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 17.879075,498.47765 H 42.982096","id","path167",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 19.776759,583.71187 15.77426,-2.78142","id","path193",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 41.598167,665.8311 15.051615,-5.47834","id","path194",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 81.668963,739.71246 103.40883,727.16095","id","path168",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 125.93981,812.61701 12.2702,-10.29591","id","path191",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 185.89732,872.82365 10.29591,-12.27019","id","path192",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 257.53004,916.73298 12.55151,-21.73985","id","path169",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 332.33219,957.7732 5.47835,-15.05162","id","path189",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 414.36024,979.93493 2.78142,-15.77425","id","path190",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 498.34046,982.10672 V 957.0037","id","path170",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 583.65133,980.28596 580.86991,964.5117","id","path187",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 665.77057,958.46456 -5.47834,-15.05161","id","path188",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 739.57526,918.31683 727.02375,896.57698","id","path171",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 812.55647,874.12301 802.26056,861.85282","id","path185",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 872.76312,814.16551 860.49293,803.8696","id","path186",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 916.59579,742.45577 894.85593,729.90426","id","path172",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 957.71266,667.73063 -15.05161,-5.47834","id","path183",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 979.8744,585.70259 -15.77425,-2.78142","id","path184",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 981.96954,501.64535 -25.10304,10e-6","id","path173",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 980.22542,416.41149 -15.77425,2.78143","id","path181",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 958.40403,334.29226 -15.05161,5.47834","id","path182",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 918.17964,260.41055 -21.73986,12.55151","id","path174",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 874.06247,187.50636 -12.27018,10.29591","id","path180",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 817.34594,130.05494 -10.40259,12.17987","id","path179",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 742.31857,83.390025 729.76706,105.12988","id","path175",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 667.6701,42.350172 -5.47834,15.051615","id","path178",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","m 585.64206,20.188432 -2.78142,15.77425","id","path176",1,"contrast-text",2,"display","inline","fill","none","stroke-width","4.18042","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["d","M 501.50816,18.016286 V 43.119307","id","path177",1,"contrast-text",2,"display","inline","fill","none","stroke-width","15","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["id","lightGray","d","M 499.99997,50.208304 A 449.79166,449.79166 0 0 0 50.208304,499.99997 449.79166,449.79166 0 0 0 499.99997,949.79163 449.79166,449.79166 0 0 0 949.79163,499.99997 449.79166,449.79166 0 0 0 499.99997,50.208304 Z m 0,92.604166 a 357.1875,357.1875 0 0 1 357.18749,357.1875 357.1875,357.1875 0 0 1 -357.18749,357.18749 357.1875,357.1875 0 0 1 -357.1875,-357.18749 357.1875,357.1875 0 0 1 357.1875,-357.1875 z",1,"rotating-dial-Backplate",2,"display","inline","fill-opacity","1","stroke","none"],[0,"xml","space","preserve","x","181.91386","y","284.25186","id","text3","transform","rotate(-30)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan3","x","181.91386","y","284.25186",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-183.53558","y","283.74811","id","text14","transform","rotate(-60)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan14","x","-183.53558","y","283.74811",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-499.70761","y","100.95312","id","text15","transform","rotate(-90)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan15","x","-499.70761","y","100.95312",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-681.66119","y","-216.36243","id","text16","transform","rotate(-120)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["x","-681.66119","y","-216.36243","id","tspan25",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-681.06616","y","-581.71271","id","text17","transform","rotate(-150)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan17","x","-681.06616","y","-581.71271",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-498.3313","y","-897.40875","id","text18","transform","scale(-1)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan18","x","-498.3313","y","-897.40875",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","-184.41313","y","-1080.8452","id","text19","transform","rotate(150)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan19","x","-184.41313","y","-1080.8452",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","181.57225","y","-1080.8853","id","text20","transform","rotate(120)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan20","x","181.57225","y","-1080.8853",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","501.42661","y","-896.93701","id","text21","transform","rotate(90)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan21","x","501.42661","y","-896.93701",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","682.35815","y","-579.63336","id","text22","transform","rotate(60)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan22","x","682.35815","y","-579.63336",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","681.81525","y","-214.27321","id","text23","transform","rotate(30)",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan23","x","681.81525","y","-214.27321",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","44.0972px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],[0,"xml","space","preserve","x","500.15503","y","101.96342","id","text24",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none","stroke-width","0.47625","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0"],["id","tspan24","x","500.15503","y","101.96342",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","52.9167px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke-width","0.47625"],["id","triangle","d","M 499.5601,155 450,197 h 100 z",1,"fixed-dial-background",2,"display","inline","stroke","none"],["id","counterAWA",2,"display","inline"],[0,"xml","space","preserve","x","910.14893","y","90.67927",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","34.6667px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],[0,"xml","space","preserve","x","907.84814","y","160.33212",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","73.3333px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],[2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","33.3333px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal"],[0,"xml","space","preserve","x","910.14893","y","200",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","34.6667px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],[0,"xml","space","preserve","x","97","y","90.47614",1,"contrast-text-dim",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","33.3333px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],[0,"xml","space","preserve","x","109.25","y","160.33212",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","73.3333px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],["id","displayArea",2,"display","inline"],[0,"xml","space","preserve","x","523.93127","y","480",1,"contrast-text",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","240px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","stroke","none"],["dy","-38",2,"font-weight","normal","font-size","180px"],[0,"xml","space","preserve","x","730","y","484",1,"contrast-text-dim",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","33.3333px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","fill-opacity","1","stroke","none"],[0,"xml","space","preserve","x","500","y","280",1,"contrast-text-dim",2,"font-style","normal","font-variant","normal","font-weight","normal","font-stretch","normal","font-size","45px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","text-align","center","text-anchor","middle","display","inline","stroke","none"],["id","IndicatorsLayer",2,"display","inline"],["transform","matrix(0.78967872,0,0,0.78967872,95.846484,6.0520865)"],["d","m 451.77021,55.078207 42.08541,-33.202814 a 12.555638,12.555638 0.26446337 0 1 15.64423,0.07221 l 42.20046,33.930296 a 15.557694,15.557694 71.53185 0 1 5.32954,15.957795 L 504.17034,279.76529 a 2.5373267,2.5373267 0.02614114 0 1 -4.91879,-0.002 L 446.37431,70.966036 a 15.416336,15.416336 108.75875 0 1 5.3959,-15.887829 z","transform","matrix(0.7935953,0,0,0.92686935,113.64335,37.878309)",1,"awa-text",2,"stroke-width","5.8876","stroke-miterlimit","0"],[0,"xml","space","preserve","x","486.45618","y","136.29939",1,"card-color",2,"font-weight","bold","font-size","52.9167px","stroke","none"],["id","tspan8","x","486.45618","y","136.29939",2,"font-style","normal","font-variant","normal","font-weight","bold","font-stretch","normal","font-size","70.5556px","font-variant-ligatures","normal","font-variant-caps","normal","font-variant-numeric","normal","font-variant-east-asian","normal","fill","#001000","fill-opacity","1","stroke","none","stroke-width","14.5521"],["id","rudder",2,"display","inline"],["width","0","height","35","x","500","y","0",1,"rudderStarboard",2,"display","inline","opacity","1","fill-opacity","1","stroke","none"],["width","0","height","35","x","-500","y","0","transform","scale(-1,1)",1,"rudderPort",2,"display","inline","opacity","1","fill-opacity","1","stroke","none"],["width","331.54941","height","33.216152","x","167.55841","y","0.89179999",1,"boxes",2,"display","inline","opacity","1","fill","none","stroke-width","2","stroke-miterlimit","4","stroke-dasharray","none","stroke-opacity","1"],["width","331.54941","height","33.216152","x","500.89182","y","0.89179999",1,"boxes",2,"display","inline","opacity","1","fill","none","stroke-width","2","stroke-miterlimit","4","stroke-dasharray","none","stroke-opacity","1"],["width","331.54941","height","33.216152","x","334.22531","y","0.89179999",1,"boxes",2,"display","inline","opacity","1","fill","none","stroke-width","2","stroke-miterlimit","4","stroke-dasharray","none","stroke-opacity","1"],["id","rect12","width","998.26178","height","33.261108","x","0.86909997","y","0.86909997",1,"boxes",2,"display","inline","opacity","1","fill","none","stroke-width","2","stroke-miterlimit","4","stroke-dasharray","none","stroke-opacity","1"]],template:function(t,i){t&1&&(oe(),D(0,"svg",4)(1,"g",5)(2,"g",6),ee(3,"path",7)(4,"path",8)(5,"path",9),G(),D(6,"g",10,0)(8,"g",11),ee(9,"path",12)(10,"path",13)(11,"path",14)(12,"path",15)(13,"path",16)(14,"path",17)(15,"path",18)(16,"path",19)(17,"path",20)(18,"path",21)(19,"path",22)(20,"path",23)(21,"path",24)(22,"path",25)(23,"path",26)(24,"path",27)(25,"path",28)(26,"path",29)(27,"path",30)(28,"path",31)(29,"path",32)(30,"path",33)(31,"path",34)(32,"path",35)(33,"path",36)(34,"path",37)(35,"path",38)(36,"path",39)(37,"path",40)(38,"path",41)(39,"path",42)(40,"path",43)(41,"path",44)(42,"path",45)(43,"path",46)(44,"path",47)(45,"path",48),D(46,"text",49)(47,"tspan",50),c(48,"330"),G()(),D(49,"text",51)(50,"tspan",52),c(51,"300"),G()(),D(52,"text",53)(53,"tspan",54),c(54,"W"),G()(),D(55,"text",55)(56,"tspan",56),c(57,"240"),G()(),D(58,"text",57)(59,"tspan",58),c(60,"210"),G()(),D(61,"text",59)(62,"tspan",60),c(63,"S"),G()(),D(64,"text",61)(65,"tspan",62),c(66,"150"),G()(),D(67,"text",63)(68,"tspan",64),c(69,"120"),G()(),D(70,"text",65)(71,"tspan",66),c(72,"E"),G()(),D(73,"text",67)(74,"tspan",68),c(75,"60"),G()(),D(76,"text",69)(77,"tspan",70),c(78,"30"),G()(),D(79,"text",71)(80,"tspan",72),c(81,"N"),G()()()(),ee(82,"path",73),G(),D(83,"g",74)(84,"text",75),c(85),G(),D(86,"text",76),c(87),D(88,"tspan",77),c(89),G()(),D(90,"text",78),c(91),G(),D(92,"text",79),c(93,"HDG"),G(),D(94,"text",80),c(95),D(96,"tspan",77),c(97),G()()(),D(98,"g",81)(99,"text",82),c(100),D(101,"tspan",83),c(102,"\xB0"),G()(),D(103,"text",84),c(104),G(),D(105,"text",85),c(106),G()(),D(107,"g",86)(108,"g",87,1),ee(110,"path",88),D(111,"text",89)(112,"tspan",90),c(113,"A"),G()()()(),D(114,"g",91),ee(115,"rect",92,2)(117,"rect",93,3)(119,"rect",94)(120,"rect",95)(121,"rect",96)(122,"rect",97),G()()),t&2&&(f(84),ct(i.apMode()=="wind"?"awa-text-dim":"contrast-text-dim"),ie("display",i.apMode()=="wind"||i.apMode()=="route"?"inline":"none"),f(),be(" ",i.apMode()==="route"?"XTE":"AWA"),f(),ct(i.apMode()=="wind"?"awa-text":"contrast-text"),ie("display",i.apMode()=="wind"||i.apMode()=="route"?"inline":"none"),f(),Q(i.apModeValue()??"--"),f(2),Q(i.apModeValueAnnotation()),f(),ie("display",i.apMode()=="route"?"inline":"none"),f(),Q(i.apModeValueDirection()),f(4),be("",i.compassAngle()??"--","\xB0"),f(2),Q(i.hdgDirectionTrue()),f(3),Q(i.lockedHdg()??"--"),f(4),Q(i.lockedHdgAnnotation()),f(2),Q(i.lockedMode()),f(2),ie("display",i.apMode()=="wind"?"inline":"none"))},styles:["[_nghost-%COMP%]{display:block;width:100%;font-family:Roboto;overflow:hidden;aspect-ratio:2/1;max-width:100%;max-height:100%}svg[_ngcontent-%COMP%]{width:100%;height:100%;display:block;overflow:hidden}.starboard[_ngcontent-%COMP%]{stroke:var(--kip-starboard-color)}.port[_ngcontent-%COMP%]{stroke:var(--kip-port-color)}.contrast-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);stroke:var(--kip-contrast-color)}.contrast-text-dim[_ngcontent-%COMP%]{fill:var(--kip-contrast-dim-color);stroke:var(--kip-contrast-dim-color)}.awa-text[_ngcontent-%COMP%]{fill:var(--kip-orange-color);stroke:var(--kip-orange-color)}.awa-text-dim[_ngcontent-%COMP%]{fill:var(--kip-orange-dim-color);stroke:var(--kip-orange-dim-color)}.card-color[_ngcontent-%COMP%]{fill:var(--kip-widget-card-background-color)}.fixed-dial-background[_ngcontent-%COMP%]{fill:var(--kip-grey-color)}.rotating-dial-Backplate[_ngcontent-%COMP%]{fill:var(--mat-sys-background)}.rudderPort[_ngcontent-%COMP%]{fill:var(--kip-port-color)}.rudderStarboard[_ngcontent-%COMP%]{fill:var(--kip-starboard-color)}.boxes[_ngcontent-%COMP%]{stroke:var(--kip-grey-color);fill:var(--kip-grey-color)}"],changeDetection:0})}return n})();var W_=["childOutlet"],Rf=(()=>{class n{widgetProperties;outlet;_streams=A(Be,{optional:!0});_meta=A(bi,{optional:!0});_runtime=A(xe,{optional:!0});_widgetService=A(Ml);_app=A(Fi);theme=Ii(this._app.cssThemeColorRoles$,{requireSync:!0});childRef;compType;constructor(){W(()=>{let e=this.theme();this.childRef&&this.childRef.setInput("theme",e)})}ngOnInit(){let e=this.widgetProperties.type;if(!e)return;this.compType=this._widgetService.getComponentType(e),this._runtime?.initialize?.(void 0,this.widgetProperties.config);let t=this._runtime?.options();t&&(this.widgetProperties.config=t),this._streams?.applyStreamsConfigDiff?.(t),this._meta?.applyMetaConfigDiff?.(t),this.outlet&&this.compType&&(this.childRef=this.outlet.createComponent(this.compType),this.childRef.setInput("id",this.widgetProperties.uuid),this.childRef.setInput("type",this.widgetProperties.type),this.childRef.setInput("theme",this.theme()))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-embedded"]],viewQuery:function(t,i){if(t&1&&$n(W_,7,Zr),t&2){let o;Mi(o=Ti())&&(i.outlet=o.first)}},inputs:{widgetProperties:"widgetProperties"},features:[Vc([Be,bi,xe])],decls:3,vars:0,consts:[["childOutlet",""],["appearance","raised",1,"widget-container","kip-widget-card-colors",2,"border","1px dashed transparent"]],template:function(t,i){t&1&&(d(0,"mat-card",1),Jr(1,null,0),u())},dependencies:[ps,Wu],styles:["[_nghost-%COMP%]{width:100%;height:100%;display:block}.widget-container[_ngcontent-%COMP%]{display:block;width:100%;height:100%;margin:0;padding:0}.kip-widget-card-colors[_ngcontent-%COMP%]{background-color:var(--kip-widget-card-background-color)}"]})}return n})();function F_(n,a){if(n&1){let e=we();d(0,"button",17),$("click",function(){ne(e);let i=T();return ae(i.toggleDodge())}),d(1,"mat-icon",18),oe(),d(2,"svg",34)(3,"text",40),c(4,"Dodge"),u(),O(5,"path",41)(6,"path",42),d(7,"text",43),c(8,"!"),u()()()()}if(n&2){let e=T();dt("ap-btn-active",e.dodgeModeActive()),R("disabled",e.apBtnDisabled()),f(5),Te("fill",e.dodgeModeActive()?"currentColor":"none")("stroke","currentColor"),f(),Te("fill",e.dodgeModeActive()?"currentColor":"none")("stroke","currentColor")}}function B_(n,a){if(n&1){let e=we();oe(),d(0,"g",48),$("click",function(){let i=ne(e).$implicit,o=T(2);return ae(!i.disabled&&o.onMenuItemClick(i.action))})("keyup.enter",function(){let i=ne(e).$implicit,o=T(2);return ae(!i.disabled&&o.onMenuItemClick(i.action))})("keyup.space",function(){let i=ne(e).$implicit,o=T(2);return ae(!i.disabled&&o.onMenuItemClick(i.action))}),O(1,"rect",49),d(2,"text",50),c(3),u()()}if(n&2){let e=a.$implicit,t=a.$index,i=T(2);ie("aria-label",e.label),f(),ct(e.isCancel?"svg-menu-item-cancel":e.current?"svg-menu-item-current":e.disabled?"svg-menu-item-disabled":"svg-menu-item"),ie("y",t*i.itemHeight)("height",i.itemHeight),f(),ct(e.isCancel?"svg-menu-item-cancel-text":e.current?"svg-menu-item-current-text":e.disabled?"svg-menu-item-disabled-text":"svg-menu-item-text"),ie("y",(t+.65)*i.itemHeight),f(),Ut(" ",e.current?"\u2713 ":"","",e.label," ")}}function G_(n,a){if(n&1){let e=we();d(0,"div",44),$("click",function(){ne(e);let i=T();return ae(i.toggleMenu())})("keyup.enter",function(){ne(e);let i=T();return ae(i.toggleMenu())})("keyup.space",function(){ne(e);let i=T();return ae(i.toggleMenu())}),oe(),d(1,"svg",45),$("click",function(i){return i.stopPropagation()})("keyup.enter",function(i){return i.stopPropagation()})("keyup.space",function(i){return i.stopPropagation()}),O(2,"rect",46),un(3),ye(4,B_,4,10,":svg:g",47,Re),mn(),u()()}if(n&2){let e=T();f(),ie("viewBox","0 0 240 "+e.menuItems().length*e.itemHeight),f(),ie("height",e.menuItems().length*e.itemHeight),f(2),Ae(e.menuItems())}}function z_(n,a){n&1&&O(0,"div",39)}var Gi={V1_MODE_PATH:"self.steering.autopilot.state",V2_BASE:"/signalk/v2/api",V2_AUTOPILOTS:"/signalk/v2/api/vessels/self/autopilots",V2_COURSE:"/signalk/v2/api/vessels/self/navigation/course"},Bn={BASE:n=>`${Gi.V2_AUTOPILOTS}/${n}`,ENGAGE:n=>`${Gi.V2_AUTOPILOTS}/${n}/engage`,DISENGAGE:n=>`${Gi.V2_AUTOPILOTS}/${n}/disengage`,STATE:n=>`${Gi.V2_AUTOPILOTS}/${n}/state`,MODE:n=>`${Gi.V2_AUTOPILOTS}/${n}/mode`,TARGET_HEADING:n=>`${Gi.V2_AUTOPILOTS}/${n}/target`,TACK:n=>`${Gi.V2_AUTOPILOTS}/${n}/tack`,GYBE:n=>`${Gi.V2_AUTOPILOTS}/${n}/gybe`,DODGE:n=>`${Gi.V2_AUTOPILOTS}/${n}/dodge`,ADJUST_HEADING:n=>`${Gi.V2_AUTOPILOTS}/${n}/target/adjust`},Jd={auto:{path:"self.steering.autopilot.state",value:"auto"},wind:{path:"self.steering.autopilot.state",value:"wind"},route:{path:"self.steering.autopilot.state",value:"route"},standby:{path:"self.steering.autopilot.state",value:"standby"},"+1":{path:"self.steering.autopilot.actions.adjustHeading",value:1},"+10":{path:"self.steering.autopilot.actions.adjustHeading",value:10},"-1":{path:"self.steering.autopilot.actions.adjustHeading",value:-1},"-10":{path:"self.steering.autopilot.actions.adjustHeading",value:-10},tackToPort:{path:"self.steering.autopilot.actions.tack",value:"port"},tackToStarboard:{path:"self.steering.autopilot.actions.tack",value:"starboard"},advanceWaypoint:{path:"self.steering.autopilot.actions.advanceWaypoint",value:"1"},compass:{path:"v2 only command",value:"v2 only command"},gps:{path:"v2 only command",value:"v2 only command"},"true wind":{path:"v2 only command",value:"v2 only command"},nav:{path:"v2 only command",value:"v2 only command"}},ec={COUNTDOWN_SECONDS:5,ERROR_DISPLAY_DURATION:6e3,MESSAGE_DISPLAY_DURATION:5e3},Nf=(()=>{class n{id=x.required();type=x.required();theme=x.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:!1,filterSelfPaths:!0,paths:{autopilotState:{description:"Autopilot State",path:"self.steering.autopilot.state",source:"default",pathType:"string",isPathConfigurable:!1,showPathSkUnitsFilter:!1,convertUnitTo:"",sampleTime:500},autopilotMode:{description:"Autopilot Mode",path:"self.steering.autopilot.mode",source:"default",pathType:"string",isPathConfigurable:!1,showPathSkUnitsFilter:!1,convertUnitTo:"",sampleTime:500},autopilotEngaged:{description:"Autopilot Engaged",path:"self.steering.autopilot.engaged",source:"default",pathType:"boolean",isPathConfigurable:!1,showPathSkUnitsFilter:!1,convertUnitTo:"",sampleTime:500},autopilotV2Target:{description:"Autopilot API v2 Target",path:"self.steering.autopilot.target",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",sampleTime:500},autopilotTargetHeading:{description:"Autopilot Target Magnetic Heading",path:"self.steering.autopilot.target.headingMagnetic",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",sampleTime:500},autopilotTargetWindHeading:{description:"Autopilot Target Apparent Wind Angle",path:"self.steering.autopilot.target.windAngleApparent",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",sampleTime:500},rudderAngle:{description:"Rudder Angle",path:"self.steering.rudderAngle",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",sampleTime:500},courseXte:{description:"Cross Track Error",path:"self.navigation.course.calcValues.crossTrackError",source:"default",pathType:"number",isPathConfigurable:!1,convertUnitTo:"m",showPathSkUnitsFilter:!0,pathRequired:!1,pathSkUnitsFilter:"m",sampleTime:500},headingMag:{description:"Magnetic Heading",path:"self.navigation.headingMagnetic",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",showConvertUnitTo:!1,sampleTime:500},headingTrue:{description:"True Heading",path:"self.navigation.headingTrue",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",showConvertUnitTo:!1,sampleTime:500},windAngleApparent:{description:"Apparent Wind Angle",path:"self.environment.wind.angleApparent",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",showConvertUnitTo:!1,sampleTime:500},windAngleTrueWater:{description:"Wind Angle True Water",path:"self.environment.wind.angleTrueWater",source:"default",pathType:"number",convertUnitTo:"deg",isPathConfigurable:!0,pathRequired:!1,showPathSkUnitsFilter:!1,pathSkUnitsFilter:"rad",showConvertUnitTo:!1,sampleTime:500}},autopilot:{invertRudder:!0,headingDirectionTrue:!1,courseDirectionTrue:!1,apiVersion:null,instanceId:null,pluginId:null,modes:null},enableTimeout:!1,dataTimeout:5};runtime=A(xe);streams=A(Be,{optional:!0});_requests=A(vi);http=A(ao);dashboard=A(Tt);_destroyRef=A(Ie);apiEndpoints;apState=w(null);apEngaged=w(null);apMode=w(null);dodgeModeActive=w(!1);autopilotTargetHeading=w(null);autopilotTargetWindHeading=w(null);heading=w(null);crossTrackError=w(null);windAngleApparent=w(null);rudder=w(null);autopilotTarget=Wc(()=>{let e=this.autopilotTargetHeading(),t=this.autopilotTargetWindHeading();return this.apMode()==="wind"?t??null:e??null});currentRequests=new Set;apGrid=L(()=>this.apMode()?"grid":"none");apEngageBtnDisabled=L(()=>{let e=this.apState(),t=this.apEngaged(),i=this.runtime.options().autopilot.apiVersion;return i?i==="v1"?!!["standby","off-line"].includes(e):i!=="v2":!0});apBtnDisabled=L(()=>{let e=this.apEngaged();return this.runtime.options().autopilot.apiVersion==="v1"?this.apMode()==="standby":!e});adjustHdgBtnVisibility=L(()=>{let e=this.apMode();return!!["auto","compass","gps","wind","true wind","standby"].includes(e)});tackBtnVisibility=L(()=>{let e=this.apMode();return!!["auto","compass","gps","wind","true wind","standby"].includes(e)});routeBtnVisibility=L(()=>{let e=this.apMode();return e==="route"||e==="nav"});countdownOverlayVisibility=w("hidden");countdownOverlayText=w("");msgOverlayVisibility=w("hidden");msgOverlayText=w("");errorOverlayVisibility=w("hidden");errorOverlayText=w("");handleCountDownCounterTimeout=null;handleConfirmActionTimeout=null;handleDisplayErrorTimeout=null;handleMessageTimeout=null;isPersistentError=!1;countDownValue=-1;actionToBeConfirmed="";menuItems=L(()=>{let e=this.apMode(),t=this.runtime.options().autopilot.apiVersion,i=this.runtime.options().autopilot.pluginId,o=[];return z(()=>{if(t==="v2"){if(i=="pypilot-autopilot-provider"){let r=[{label:"Compass",action:"compass"},{label:"GPS",action:"gps"},{label:"Wind",action:"wind"},{label:"True Wind",action:"true wind"},{label:"Navigation",action:"nav"},{label:"Close",action:"cancel",isCancel:!0}];o=this.parseMenuItems(r,e)}}else if(t==="v1"){let r=[{label:"Auto",action:"auto"},{label:"Wind",action:"wind"},{label:"Route",action:"route"},{label:"Close",action:"cancel",isCancel:!0}];o=this.parseMenuItems(r,e)}}),o});menuOpen=w(!1);itemHeight=60;padding=20;embedWidgetColor="contrast";nextWptProperties=w({type:"widget-position",uuid:"db473695-42b1-4435-9d3d-ac2f27bf9665",config:{displayName:"Next WPT",filterSelfPaths:!0,paths:{longPath:{description:"Longitude",path:"self.navigation.courseGreatCircle.nextPoint.position.longitude",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"longitudeMin",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500},latPath:{description:"Latitude",path:"self.navigation.courseGreatCircle.nextPoint.position.latitude",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"latitudeMin",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500}},color:this.embedWidgetColor,enableTimeout:!1,dataTimeout:5}},{equal:Ei});ttwProperties=w({type:"widget-numeric",uuid:"ee022f2f-ee23-41a7-b0b1-0928dc28864d",config:{displayName:"TTWpt",filterSelfPaths:!0,paths:{numericPath:{description:"Time To Waypoint",path:"self.navigation.course.calcValues.timeToGo",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"D HH:MM:SS",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500}},showMax:!1,showMin:!1,numDecimal:1,numInt:1,showMiniChart:!1,color:this.embedWidgetColor,enableTimeout:!1,dataTimeout:5,ignoreZones:!1}},{equal:Ei});etaProperties=w({type:"widget-datetime",uuid:"544ca35d-18bf-4a90-9aa8-b12312e3fc60",config:{displayName:"ETA",filterSelfPaths:!0,paths:{gaugePath:{description:"Estimated Time Of Arrival Date",path:"self.navigation.course.calcValues.estimatedTimeOfArrival",source:"default",pathType:"Date",isPathConfigurable:!0,sampleTime:500}},dateFormat:"EEE HH:mm",dateTimezone:"System Timezone -",color:this.embedWidgetColor,enableTimeout:!1,dataTimeout:5}},{equal:Ei});dtwProperties=w({type:"widget-numeric",uuid:"ee02ef2f-ee23-41a7-b0b1-0928dc28864d",config:{displayName:"DTWpt",filterSelfPaths:!0,paths:{numericPath:{description:"Distance To Waypoint",path:"self.navigation.course.calcValues.distance",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"nm",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500}},showMax:!1,showMin:!1,numDecimal:1,numInt:1,showMiniChart:!1,color:this.embedWidgetColor,enableTimeout:!1,dataTimeout:5,ignoreZones:!1}},{equal:Ei});xteProperties=w({type:"widget-numeric",uuid:"9234856b-7573-4154-a44f-3baf7c6f119c",config:{displayName:"XTE",filterSelfPaths:!0,paths:{numericPath:{description:"Cross Track Error",path:"self.navigation.course.calcValues.crossTrackError",source:"default",pathType:"number",isPathConfigurable:!0,convertUnitTo:"m",showPathSkUnitsFilter:!0,pathSkUnitsFilter:null,sampleTime:500}},showMax:!1,showMin:!1,numDecimal:1,numInt:1,showMiniChart:!1,color:this.embedWidgetColor,enableTimeout:!1,dataTimeout:5,ignoreZones:!1}},{equal:Ei});constructor(){W(()=>{this.runtime?.options()&&z(()=>{this.cancelAllHttpRequests(),this.isPersistentError=!1,this.errorOverlayVisibility.set("hidden"),this.errorOverlayText.set(""),this.apEngaged.set(null),this.startWidget()})})}ngOnInit(){this.startWidget()}startWidget(){let e={statusCode:500,statusCodeDescription:"Autopilot widget not configured",requestId:"",state:""},t=this.runtime.options().autopilot.apiVersion,i=this.runtime.options().autopilot.instanceId,o=this.runtime.options().autopilot.pluginId,r=s=>{console.error(`[Autopilot Widget] ${s}`),this.displayApError(e),this.isPersistentError=!0,this.apMode.set("off-line"),this.apState.set("off-line"),this.apEngaged.set(!1)};if(!t){r("Not configured with autopilot API version, skipping initialization");return}if(t==="v2"){if(!i){r("No autopilot instance ID configured for V2 API, skipping initialization");return}if(!o){r("No autopilot plugin ID configured for V2 API, skipping initialization");return}this.apiEndpoints=this.setV2Endpoint(i),this.startV2Subscriptions();return}if(t==="v1"){this.startV1Subscriptions();return}r(`Unknown autopilot API version: ${t}`)}setV2Endpoint(e){return{engage:Bn.ENGAGE(e),disengage:Bn.DISENGAGE(e),mode:Bn.MODE(e),state:Bn.STATE(e),target:Bn.TARGET_HEADING(e),tack:Bn.TACK(e),gybe:Bn.GYBE(e),dodge:Bn.DODGE(e),adjustHeading:Bn.ADJUST_HEADING(e)}}isV2CommandSupported(e){return this.runtime.options().autopilot.modes.includes(e)}startV2Subscriptions(){this.streams.observe("autopilotState",e=>{e.data?.value?this.apState.set(e.data.value):(this.apState.set("off-line"),console.warn("[Autopilot Widget] Autopilot state is null or not available"))}),this.streams.observe("autopilotMode",e=>{e.data?.value?this.apMode.set(e.data.value):(this.apMode.set("off-line"),console.warn("[Autopilot Widget] Autopilot mode is null or not available"))}),this.streams.observe("autopilotEngaged",e=>{e.data?.value!=null?this.apEngaged.set(e.data.value):(this.apEngaged.set(!1),console.warn("[Autopilot Widget] Autopilot engaged is null or not available"))}),this.streams.observe("autopilotV2Target",e=>{e.data?.value?this.autopilotTarget.set(e.data.value):(this.autopilotTarget.set(null),console.warn("[Autopilot Widget] Autopilot V2 target is null or not available"))}),this.startDataSubscription()}startV1Subscriptions(){this.runtime.options().paths.autopilotMode.path=Gi.V1_MODE_PATH,this.streams.observe("autopilotMode",e=>{e.data?.value?this.apMode.set(e.data.value):(this.apMode.set("off-line"),console.warn("[Autopilot Widget] Autopilot V1 mode state is null or not available"))}),this.streams.observe("autopilotTargetHeading",e=>this.autopilotTargetHeading.set(e.data.value!=null?e.data.value:0)),this.streams.observe("autopilotTargetWindHeading",e=>this.autopilotTargetWindHeading.set(e.data.value!=null?e.data.value:0)),this.startDataSubscription(),this.subscribePutResponse(),this.apState.set(null)}startDataSubscription(){this.streams.observe("courseXte",e=>this.crossTrackError.set(e.data.value!=null?e.data.value:0)),this.streams.observe("rudderAngle",e=>{e.data.value===null?this.rudder.set(null):this.rudder.set(this.runtime.options().autopilot.invertRudder?-e.data.value:e.data.value)}),this.runtime.options().autopilot.headingDirectionTrue?this.streams.observe("headingTrue",e=>this.heading.set(e.data.value!=null?e.data.value:0)):this.streams.observe("headingMag",e=>this.heading.set(e.data.value!=null?e.data.value:0)),this.streams.observe("windAngleApparent",e=>this.windAngleApparent.set(e.data.value!=null?e.data.value:0))}subscribePutResponse(){this._requests.subscribeRequest().pipe(De(this._destroyRef)).subscribe(e=>{e.widgetUUID==this.id()&&this.commandReceived(e)})}makeHttpRequest(e){let t=e.pipe(De(this._destroyRef));return this.currentRequests.add(t),t.pipe(Gr(()=>this.currentRequests.delete(t)))}cancelAllHttpRequests(){this.currentRequests.clear()}buildAndSendCommand(e){let t=Jd[e];if(typeof t>"u"){alert("Unknown Autopilot command: "+e);return}if(this.actionToBeConfirmed!==""&&this.actionToBeConfirmed!==e&&this.clearConfirmCmd(),(e==="tackToPort"||e==="tackToStarboard")&&this.actionToBeConfirmed===""){this.confirmTack(e);return}if((e==="route"&&this.apMode()==="route"||e==="route"&&this.apMode()==="nav")&&this.actionToBeConfirmed===""){this.confirmAdvanceWaypoint(e);return}if(this.actionToBeConfirmed===e){if(this.clearConfirmCmd(),e==="tackToPort"||e==="tackToStarboard"){let i=e==="tackToPort"?"port":"starboard";this.performTackOrGybe("tack",i)}(e==="route"&&this.apMode()==="route"||e==="route"&&this.apMode()==="nav")&&this.routeCommand(e,Jd.advanceWaypoint);return}this.routeCommand(e,t)}routeCommand(e,t){let i=this.runtime.options().autopilot.apiVersion;i==="v2"?(e==="route"&&this.apMode()==="nav"&&(e="advanceWaypoint"),this.sendV2Command(e)):i==="v1"&&!t.path.startsWith("v2:")?this.sendV1Command(t):(console.error("[Autopilot Widget] Unsupported basic command:",t.path),this.displayApError({statusCode:400,statusCodeDescription:"Unsupported Command",message:`Command path '${t.path}' is not supported in the current API version`,widgetUUID:this.id()}))}sendV1Command(e){this._requests.putRequest(e.path,e.value,this.id()),console.log(`AP Action:
46
+ `+JSON.stringify(e))}sendV2Command(e,t){return Le(this,null,function*(){let i=this.apiEndpoints;if(!i){console.error("V2 endpoints not available");return}let o=this.dodgeModeActive(),r;switch(e){case"+1":r={path:o?i.dodge:i.adjustHeading,value:{value:1,units:"deg"}},this.executeRestRequest("PUT",r);break;case"+10":r={path:o?i.dodge:i.adjustHeading,value:{value:10,units:"deg"}},this.executeRestRequest("PUT",r);break;case"-1":r={path:o?i.dodge:i.adjustHeading,value:{value:-1,units:"deg"}},this.executeRestRequest("PUT",r);break;case"-10":r={path:o?i.dodge:i.adjustHeading,value:{value:-10,units:"deg"}},this.executeRestRequest("PUT",r);break;case"advanceWaypoint":r={path:`${Gi.V2_COURSE}/activeRoute/nextPoint`},this.executeRestRequest("PUT",r);break;case"tack":r={path:`${i.tack}/${t.value}`},this.executeRestRequest("POST",r);break;case"gybe":r={path:`${i.gybe}/${t}`},this.executeRestRequest("POST",r);break;case"dodge":r={path:i.dodge},this.dodgeModeActive()?this.executeRestRequest("DELETE",r).then(s=>{s.statusCode!==200&&this.dodgeModeActive.set(!1)}):this.executeRestRequest("POST",r).then(s=>{s.statusCode!==200&&this.dodgeModeActive.set(!0)});break;case"target_heading":r={path:i.target,value:t},this.executeRestRequest("PUT",r);break;case"standby":{let s={path:`${this.apEngaged()?i.disengage:i.engage}`};this.executeRestRequest("POST",s)}break;case"auto":case"compass":case"gps":case"wind":case"true wind":case"route":case"nav":yield this.setModeAndEnable(e,i);break;default:console.error("Unknown V2 command:",e),this.displayApError({statusCode:400,statusCodeDescription:"Unknown Command",message:`V2 command '${e}' is not supported`,widgetUUID:this.id()})}})}executeRestRequest(e,t){return Le(this,null,function*(){try{let i;switch(e){case"POST":i=yield Wr(this.makeHttpRequest(this.http.post(t.path,void 0)));break;case"PUT":i=yield Wr(this.makeHttpRequest(this.http.put(t.path,t.value==null?void 0:t.value)));break;case"DELETE":i=yield Wr(this.makeHttpRequest(this.http.delete(t.path)));break;default:console.error("[Autopilot Widget] Unsupported REST method:",e)}return i&&i.statusCode===200?i:(console.warn("[Autopilot Widget] V2 Command completed with non-success status:",JSON.stringify(i)),i||{statusCode:0,message:"Unavailable",state:"not provided"})}catch(i){return console.error("[Autopilot Widget] REST operation failed:",i),this.displayApError({statusCode:500,statusCodeDescription:"V2 Command Failed",message:`Failed to execute ${e} ${t.path}`,widgetUUID:this.id()}),{statusCode:0,message:i instanceof Error?i.message:"REST operation failed",state:null}}})}setModeAndEnable(e,t){return Le(this,null,function*(){try{let i=yield this.executeRestRequest("PUT",{path:t.mode,value:{value:e}});if(i.statusCode!==200){console.error(`[Autopilot Widget] Failed to set mode '${e}':`,i);return}let o=yield this.executeRestRequest("PUT",{path:t.state,value:{value:"enabled"}});o.statusCode!==200&&console.error(`[Autopilot Widget] Failed to engage after mode '${e}':`,o)}catch(i){console.error("[Autopilot Widget] setModeAndEngage unexpected error:",i)}})}performTackOrGybe(e,t){if(this.runtime.options().autopilot.apiVersion==="v2")this.sendV2Command(e,{value:t});else{if(e!=="tack")return;let i=Jd[t==="port"?"tackToPort":"tackToStarboard"];this._requests.putRequest(i.path,i.value,this.id())}}setAbsoluteTarget(e){this.runtime.options().autopilot.apiVersion==="v2"?this.sendV2Command("target_heading",{value:e,units:"deg"}):console.error("[Autopilot Widget] Absolute target only available in V2 API")}toggleDodge(){this.runtime.options().autopilot.apiVersion==="v2"?this.sendV2Command("dodge"):(console.warn("[Autopilot Widget] Dodge mode only available in V2 API"),this.displayApError({statusCode:400,statusCodeDescription:"V2 API Required",message:"Dodge mode only available in V2 API",widgetUUID:this.id()}))}commandReceived(e){e.statusCode!=200&&this.displayApError(e)}confirmAdvanceWaypoint(e){this.startConfirmCmd(e,"Repeat key [Adv Wpt] to confirm")}confirmTack(e){let t="";if(e==="tackToPort")t="Port",this.actionToBeConfirmed=e;else if(e==="tackToStarboard")t="Starboard",this.actionToBeConfirmed=e;else{this.actionToBeConfirmed="";return}let i=`Repeat [Tack ${t}] key to confirm`;this.startConfirmCmd(e,i)}startConfirmCmd(e,t){this.countDownValue=ec.COUNTDOWN_SECONDS,this.actionToBeConfirmed=e,this.countdownOverlayText.set(t),this.countdownOverlayVisibility.set("visible"),this.updateCountDownCounter(t),clearTimeout(this.handleConfirmActionTimeout),this.handleConfirmActionTimeout=setTimeout(()=>{this.countdownOverlayVisibility.set("hidden"),this.countdownOverlayText.set(""),this.actionToBeConfirmed=""},ec.MESSAGE_DISPLAY_DURATION)}clearConfirmCmd(){clearTimeout(this.handleConfirmActionTimeout),clearTimeout(this.handleCountDownCounterTimeout),this.countDownValue=-1,this.countdownOverlayVisibility.set("hidden"),this.countdownOverlayText.set(""),this.actionToBeConfirmed=""}updateCountDownCounter(e){this.countDownValue>0?(clearTimeout(this.handleCountDownCounterTimeout),this.countdownOverlayText.set(e),this.countDownValue-=1,this.handleCountDownCounterTimeout=setTimeout(()=>{this.updateCountDownCounter(e)},1e3)):(this.countDownValue=-1,clearTimeout(this.handleCountDownCounterTimeout))}displayApError(e){if(this.isPersistentError){console.warn("[Autopilot Widget] Skipping temporary error display - persistent error active:",e.statusCodeDescription);return}let t=e.statusCode+" - "+e.statusCodeDescription+".";e.message&&(t=t+"Server Message: "+e.message+"."),this.errorOverlayText.set(t),this.errorOverlayVisibility.set("visible"),clearTimeout(this.handleDisplayErrorTimeout),this.handleDisplayErrorTimeout=setTimeout(()=>{this.isPersistentError||(this.errorOverlayVisibility.set("hidden"),this.errorOverlayText.set(""))},ec.ERROR_DISPLAY_DURATION)}toggleMenu(){this.menuOpen.set(!this.menuOpen())}onMenuItemClick(e){if(e==="cancel"){this.toggleMenu();return}this.buildAndSendCommand(e),this.menuOpen.set(!1)}parseMenuItems(e,t){let i=this.runtime.options().autopilot.apiVersion;return e.map(r=>{if(r.isCancel)return ge(Z({},r),{current:!1,disabled:!1});let s=!1;if(i==="v1")switch(t){case"standby":s=r.action==="auto"||r.action==="wind";break;case"auto":s=r.action==="wind"||r.action==="route";break;case"wind":s=r.action==="auto";break;case"route":s=r.action==="auto";break;default:s=!1}else i==="v2"&&(s=this.runtime.options().autopilot.modes.includes(r.action));return ge(Z({},r),{current:r.action===t,disabled:!s})})}ngOnDestroy(){this.cancelAllHttpRequests(),clearTimeout(this.handleCountDownCounterTimeout),clearTimeout(this.handleConfirmActionTimeout),clearTimeout(this.handleDisplayErrorTimeout),clearTimeout(this.handleMessageTimeout)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-autopilot"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:93,vars:64,consts:[[1,"autopilot-grid-container"],[1,"ap-modes"],["mat-flat-button","",1,"ap-btn","ap-btn-ctrlbar",3,"click","disabled"],[1,"svg-icon-ctrlbar"],["width","100%","height","100%","viewBox","0 0 100 14","preserveAspectRatio","xMidYMid meet",1,"svg-element","svg-modes"],[0,"xml","space","preserve","x","50","y","10.7"],["mat-flat-button","",3,"click","disabled"],[0,"xml","space","preserve","x","50.090435","y","10.743966"],[1,"ap-screen"],[3,"apMode","targetPilotHeadingTrue","autopilotTarget","courseXte","compassHeading","headingDirectionTrue","appWindAngle","rudderAngle"],[1,"ap-screen-overlay"],["viewBox","0 0 100 100","width","100%","height","100%","preserveAspectRatio","xMidYMid meet"],["x","50%","y","25",1,"svg-element-msg",3,"innerHTML"],["x","50%","dy","75",1,"svg-element-msg",2,"font-size","3em",3,"innerHTML"],[1,"ap-screen-overlay","ap-error-text"],[1,"material-icons","ap-error-icon"],["x","50%","y","25",1,"svg-element-msg","svg-element-error-txt",3,"innerHTML"],["mat-flat-button","",1,"ap-btn",3,"click","disabled"],[1,"svg-icon"],["width","100%","height","100%","viewBox","0 0 100 100","preserveAspectRatio","xMidYMid meet",1,"svg-element"],["fill","currentColor","stroke","currentColor",0,"xml","space","preserve","x","49.894032","y","98.734871"],["fill","currentColor","stroke","currentColor","d","M 31.033486,35.785143 68.966514,66.630677 M 31.033486,35.640825 68.966514,4.79529"],["fill","currentColor","stroke","currentColor",0,"xml","space","preserve","x","50.052986","y","98.734871"],["fill","currentColor","stroke","currentColor","d","M 68.966514,35.785143 31.033486,66.630677 M 68.966514,35.640825 31.033486,4.79529"],["fill","currentColor","stroke","currentColor","d","M 15.778367,35.785143 53.711395,66.630677 M 15.778367,35.640825 53.711395,4.79529"],["fill","currentColor","stroke","currentColor","d","M 46.288608,35.785143 84.221633,66.630677 M 46.288608,35.640825 84.221633,4.79529"],["fill","currentColor","stroke","currentColor","d","M 84.221633,35.785143 46.288605,66.630677 M 84.221633,35.640825 46.288605,4.79529"],["fill","currentColor","stroke","currentColor","d","M 53.711392,35.785143 15.778367,66.630677 M 53.711392,35.640825 15.778367,4.79529"],["transform","scale(-1,1) translate(-100,0)"],["fill","currentColor","d","M 90.5,22.5 67.5,45 96,53 Z",2,"stroke-width","8","stroke-linecap","round","stroke-linejoin","round","stroke-miterlimit","0","stroke-dasharray","none"],["fill","none","stroke","currentColor","d",`M 76,31
47
+ A 36 38 0 0 0 24,33`,2,"stroke-width","8.45947","stroke-linecap","square","stroke-linejoin","miter","stroke-miterlimit","0"],["fill","currentColor","cx","14.5","cy","45.25","r","12"],[1,"embed-widget",3,"widgetProperties"],["mat-flat-button","",1,"ap-btn",3,"disabled","ap-btn-active"],["viewBox","0 0 100 100","preserveAspectRatio","xMidYMid meet",1,"svg-element","svg-route"],["fill","currentColor","stroke","currentColor",0,"xml","space","preserve","x","49.961578","y","86.799866"],["fill","currentColor","d","M 12.090795,4 V 63.58544 L 71.676235,33.792718 Z",2,"stroke","none"],["fill","currentColor","stroke","currentColor","d","M 75.95674,4 V 63.58544",2,"fill","none","stroke-width","9.90493","stroke-linecap","butt","stroke-linejoin","miter","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],["tabindex","0","role","button","aria-label","Close menu",1,"svg-menu-overlay"],[1,"widgetOverlay"],[0,"xml","space","preserve","x","49.961578","y","86.799866"],["d","M 4.6584699,36.552789 29.229283,58.159051 M 4.6584699,36.451699 29.229283,14.845436",2,"stroke-linecap","round","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],["d","M 95.34153,36.552789 70.770717,58.159051 M 95.34153,36.451699 70.770717,14.845436",2,"stroke-linecap","round","stroke-miterlimit","0","stroke-dasharray","none","stroke-opacity","1"],[0,"xml","space","preserve","x","50.167503","y","61.058273",2,"font-size","68.6095px"],["tabindex","0","role","button","aria-label","Close menu",1,"svg-menu-overlay",3,"click","keyup.enter","keyup.space"],["tabindex","0","role","presentation","aria-label","Menu",1,"svg-menu",3,"click","keyup.enter","keyup.space"],["x","0","y","0","width","240",1,"svg-menu-box"],["tabindex","0","role","button",2,"cursor","pointer"],["tabindex","0","role","button",2,"cursor","pointer",3,"click","keyup.enter","keyup.space"],["x","0","width","240"],["x","120"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1)(2,"button",2),$("click",function(){return i.toggleMenu()}),d(3,"mat-icon",3),oe(),d(4,"svg",4)(5,"text",5),c(6),ut(7,"titlecase"),u()()()(),Ue(),d(8,"button",6),$("click",function(){return i.buildAndSendCommand("standby")}),d(9,"mat-icon",3),oe(),d(10,"svg",4)(11,"text",7),c(12,"Disengage"),u()()()()(),Ue(),d(13,"div",8),O(14,"app-svg-autopilot",9),d(15,"div",10),oe(),d(16,"svg",11),O(17,"text",12)(18,"text",13),u()(),Ue(),d(19,"div",14)(20,"span",15),c(21,"warning"),u(),oe(),d(22,"svg",11),O(23,"text",16),u()()(),Ue(),d(24,"div")(25,"button",17),$("click",function(){return i.buildAndSendCommand("-1")}),d(26,"mat-icon",18),oe(),d(27,"svg",19)(28,"text",20),c(29,"-1\xB0"),u(),O(30,"path",21),u()()()(),Ue(),d(31,"div")(32,"button",17),$("click",function(){return i.buildAndSendCommand("+1")}),d(33,"mat-icon",18),oe(),d(34,"svg",19)(35,"text",22),c(36,"+1\xB0"),u(),O(37,"path",23),u()()()(),Ue(),d(38,"div")(39,"button",17),$("click",function(){return i.buildAndSendCommand("-10")}),d(40,"mat-icon",18),oe(),d(41,"svg",19)(42,"text",20),c(43,"-10\xB0"),u(),O(44,"path",24)(45,"path",25),u()()()(),Ue(),d(46,"div")(47,"button",17),$("click",function(){return i.buildAndSendCommand("+10")}),d(48,"mat-icon",18),oe(),d(49,"svg",19)(50,"text",22),c(51,"+10\xB0"),u(),O(52,"path",26)(53,"path",27),u()()()(),Ue(),d(54,"div")(55,"button",17),$("click",function(){return i.buildAndSendCommand("tackToPort")}),d(56,"mat-icon",18),oe(),d(57,"svg",19)(58,"text",20),c(59,"Tack"),u(),d(60,"g",28),O(61,"path",29)(62,"path",30)(63,"circle",31),u()()()()(),Ue(),d(64,"div")(65,"button",17),$("click",function(){return i.buildAndSendCommand("tackToStarboard")}),d(66,"mat-icon",18),oe(),d(67,"svg",19)(68,"text",20),c(69,"Tack"),u(),O(70,"path",29)(71,"path",30)(72,"circle",31),u()()()(),Ue(),d(73,"div"),O(74,"widget-embedded",32),u(),d(75,"div"),O(76,"widget-embedded",32),u(),d(77,"div"),O(78,"widget-embedded",32),u(),d(79,"div"),O(80,"widget-embedded",32),u(),d(81,"div"),I(82,F_,9,11,"button",33),u(),d(83,"div")(84,"button",17),$("click",function(){return i.buildAndSendCommand("route")}),d(85,"mat-icon",18),oe(),d(86,"svg",34)(87,"text",35),c(88,"Adv Wpt"),u(),O(89,"path",36)(90,"path",37),u()()()()(),I(91,G_,6,2,"div",38),I(92,z_,1,0,"div",39)),t&2&&(Te("display",i.apGrid()),f(2),R("disabled",i.apState()==="off-line"||i.apMode()==="off-line"),f(4),be("Mode ",Et(7,62,i.apMode())," \xA0\u22EE"),f(2),ct(i.apEngaged()?"ap-btn ap-btn-ctrlbar ap-btn-engage":"ap-btn ap-btn-ctrlbar ap-btn-disengage"),R("disabled",i.apEngageBtnDisabled()),f(6),R("apMode",i.apMode())("targetPilotHeadingTrue",i.runtime.options().autopilot.courseDirectionTrue)("autopilotTarget",i.autopilotTarget())("courseXte",i.crossTrackError())("compassHeading",i.heading())("headingDirectionTrue",i.runtime.options().autopilot.headingDirectionTrue)("appWindAngle",i.windAngleApparent())("rudderAngle",i.rudder()),f(),Te("visibility",i.countdownOverlayVisibility()),f(2),R("innerHTML",i.countdownOverlayText(),Yr),f(),Te("visibility",i.countDownValue>=0?"visible":"hidden"),R("innerHTML",i.countDownValue+1,Yr),f(),Te("visibility",i.errorOverlayVisibility()),f(4),R("innerHTML",i.errorOverlayText(),Yr),f(),Te("display",i.adjustHdgBtnVisibility()||i.apMode()==="nav"&&i.dodgeModeActive()?"block":"none"),f(),R("disabled",i.apBtnDisabled()),f(6),Te("display",i.adjustHdgBtnVisibility()||i.apMode()==="nav"&&i.dodgeModeActive()?"block":"none"),f(),R("disabled",i.apBtnDisabled()),f(6),Te("display",i.adjustHdgBtnVisibility()||i.apMode()==="nav"&&i.dodgeModeActive()?"block":"none"),f(),R("disabled",i.apBtnDisabled()),f(7),Te("display",i.adjustHdgBtnVisibility()||i.apMode()==="nav"&&i.dodgeModeActive()?"block":"none"),f(),R("disabled",i.apBtnDisabled()),f(7),Te("display",i.tackBtnVisibility()?"block":"none"),f(),R("disabled",i.apBtnDisabled()),f(9),Te("display",i.tackBtnVisibility()?"block":"none"),f(),R("disabled",i.apBtnDisabled()),f(8),Te("display",i.routeBtnVisibility()&&!i.dodgeModeActive()?"block":"none"),f(),R("widgetProperties",i.nextWptProperties()),f(),Te("display",i.routeBtnVisibility()&&!i.dodgeModeActive()?"block":"none"),f(),R("widgetProperties",i.etaProperties()),f(),Te("display",i.routeBtnVisibility()&&!i.dodgeModeActive()?"block":"none"),f(),R("widgetProperties",i.dtwProperties()),f(),Te("display",i.routeBtnVisibility()&&!i.dodgeModeActive()?"block":"none"),f(),R("widgetProperties",i.xteProperties()),f(),Te("display",i.routeBtnVisibility()?"block":"none"),f(),P(i.runtime.options().autopilot.apiVersion==="v2"?82:-1),f(),Te("display",i.routeBtnVisibility()?"block":"none"),f(),R("disabled",i.apBtnDisabled()||i.dodgeModeActive()),f(7),P(i.menuOpen()?91:-1),f(),P(i.dashboard.isDashboardStatic()?-1:92))},dependencies:[Pf,et,vt,Xe,je,If,Rf,hn],styles:['[_nghost-%COMP%]{display:block;height:100%;width:100%}.widget-host[_ngcontent-%COMP%]{display:block;height:100%;width:100%}.autopilot-grid-container[_ngcontent-%COMP%]{box-sizing:border-box;width:100%;height:100%;display:grid;gap:.5rem .5rem;padding:10px;grid-template:"modes modes" minmax(50px,1fr) "screen screen" minmax(50px,auto)/1fr 1fr;grid-template-rows:.15fr 1fr;grid-auto-rows:minmax(50px,2fr)}.ap-modes[_ngcontent-%COMP%]{grid-area:modes;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:minmax(50px,1fr);gap:.5rem .5rem}.ap-screen[_ngcontent-%COMP%]{position:relative;grid-area:screen;width:100%;height:100%;max-height:200px;align-content:center}.ap-screen-overlay[_ngcontent-%COMP%]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:50;vertical-align:middle;text-align:center;background-color:var(--mat-sys-background)}.ap-error-icon[_ngcontent-%COMP%]{padding-top:15px}.ap-error-text[_ngcontent-%COMP%]{color:var(--mat-sys-error-container)}.ap-btn[_ngcontent-%COMP%]{width:100%;border-radius:12px;align-items:center;justify-content:center;cursor:pointer;--mat-button-filled-container-color: var(--kip-blue-dim-color);--mat-button-filled-label-text-color: var(--kip-contrast-color);--mat-button-filled-container-height: 100%}.ap-btn-ctrlbar[_ngcontent-%COMP%]{padding:4px}.ap-btn-modes[_ngcontent-%COMP%]{--mat-button-filled-horizontal-padding: 0rem}.ap-btn-notifications[_ngcontent-%COMP%]{--mat-button-filled-container-color: var(--kip-yellow-dim-color)}.ap-btn-engage[_ngcontent-%COMP%]{--mat-button-filled-horizontal-padding: 0rem;--mat-button-filled-container-color: var(--kip-port-color)}.ap-btn-disengage[_ngcontent-%COMP%]{--mat-button-filled-horizontal-padding: 0rem;--mat-button-filled-container-color: var(--kip-starboard-color)}.svg-icon-ctrlbar[_ngcontent-%COMP%]{width:100%;height:100%;margin:0;padding:0}.svg-icon[_ngcontent-%COMP%]{width:100%;height:100%;margin:0;padding:.5rem}.svg-element[_ngcontent-%COMP%]{width:100%;height:100%;padding:0}.svg-element[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-family:Roboto;font-size:25px;font-weight:700;text-align:center;text-anchor:middle;font-style:normal;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none}.svg-element[_ngcontent-%COMP%] path[_ngcontent-%COMP%]{stroke-width:7.59058;stroke-linecap:round;stroke-miterlimit:0;stroke-dasharray:none}.svg-element-msg[_ngcontent-%COMP%]{font-family:Roboto;font-size:12px;font-weight:700;text-align:center;text-anchor:middle;font-style:normal;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:var(--kip-contrast-color);fill-opacity:1;stroke:none}.svg-element-note[_ngcontent-%COMP%]{font-family:Roboto;font-size:.5em;font-weight:400;text-align:center;text-anchor:middle;font-style:italic;font-variant:normal;font-stretch:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:var(--kip-contrast-dim-color);fill-opacity:1;stroke:none}.svg-element-error-txt[_ngcontent-%COMP%]{fill:var(--mat-sys-error-container)}.svg-element-notifications[_ngcontent-%COMP%]{fill:var(--kip-contrast-color)}.svg-element-clear-notifications[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);fill-opacity:1;stroke:none}.svg-modes[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-size:12px}.svg-route[_ngcontent-%COMP%] text[_ngcontent-%COMP%]{font-size:25px}.embed-widget[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-surface-container-highest);border-radius:12px}@media(max-width:600px){.autopilot-grid-container[_ngcontent-%COMP%]{padding:.5rem;gap:.25rem}.autopilot-btn[_ngcontent-%COMP%]{font-size:.95rem;padding:.4em .5em}}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}.svg-menu-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;background:#000c;z-index:19;display:flex;align-items:center;justify-content:center}.svg-menu-box[_ngcontent-%COMP%]{fill:var(--mat-sys-surface);stroke:none;border-radius:12px}.svg-menu[_ngcontent-%COMP%]{max-width:80%;background:transparent;border-radius:12px;box-shadow:0 4px 24px #00000026;z-index:20;display:block;font-family:Roboto;font-size:1.1rem;font-weight:700;text-anchor:middle;text-align:center;alignment-baseline:middle}g[_ngcontent-%COMP%]:hover rect[_ngcontent-%COMP%]{fill-opacity:.7}g[_ngcontent-%COMP%]:hover text[_ngcontent-%COMP%]{fill-opacity:.7}g[_ngcontent-%COMP%]:active rect[_ngcontent-%COMP%]{fill-opacity:.4}g[_ngcontent-%COMP%]:active text[_ngcontent-%COMP%]{fill-opacity:.4}.svg-menu-item[_ngcontent-%COMP%]{fill:var(--kip-blue-color);stroke:var(--mat-sys-outline-variant)}.svg-menu-item-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);stroke:none}.svg-menu-item-current[_ngcontent-%COMP%]{fill:var(--kip-blue-color);pointer-events:none;stroke:var(--mat-sys-outline-variant)}.svg-menu-item-current-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);stroke:none;pointer-events:none}.svg-menu-item-disabled[_ngcontent-%COMP%]{fill:var(--kip-blue-color);pointer-events:none;stroke:var(--mat-sys-outline-variant)}.svg-menu-item-disabled-text[_ngcontent-%COMP%]{fill:var(--mat-sys-surface-tint);stroke:none;pointer-events:none}.svg-menu-item-cancel[_ngcontent-%COMP%]{fill:var(--mat-sys-outline);stroke:var(--mat-sys-outline-variant)}.svg-menu-item-cancel-text[_ngcontent-%COMP%]{fill:var(--kip-contrast-color);stroke:none}.counterText[_ngcontent-%COMP%]{font-weight:700;font-size:7em;margin-top:0;margin-bottom:0}'],changeDetection:0})}return n})();var Of={"widget-bms":{selector:"widget-bms",familyKey:"batteries",selfRootPath:"self.electrical.batteries",displayTitle:"Battery Monitor",templateExpansionMode:"bms-battery-tree"},"widget-solar-charger":{selector:"widget-solar-charger",familyKey:"solar",selfRootPath:"self.electrical.solar",displayTitle:"Solar Charger",templateExpansionMode:"solar-tree"},"widget-charger":{selector:"widget-charger",familyKey:"chargers",selfRootPath:"self.electrical.chargers",displayTitle:"Charger",templateExpansionMode:"charger-tree"},"widget-inverter":{selector:"widget-inverter",familyKey:"inverters",selfRootPath:"self.electrical.inverters",displayTitle:"Inverter",templateExpansionMode:"inverter-tree"},"widget-alternator":{selector:"widget-alternator",familyKey:"alternators",selfRootPath:"self.electrical.alternators",displayTitle:"Alternator",templateExpansionMode:"alternator-tree"},"widget-ac":{selector:"widget-ac",familyKey:"ac",selfRootPath:"self.electrical.ac",displayTitle:"AC",templateExpansionMode:"ac-tree"}};function U_(n){return n?Object.hasOwn(Of,n):!1}function zi(n){return U_(n)?Of[n]:null}var ci={cardCornerRadius:4,stateBarCornerRadius:2.5,titleX:0,titleY:10,titleFontSize:12.5,primaryX:135,primaryY:48,primaryFontSize:34,primaryFontWeight:700,lineOneX:5,lineOneY:30,lineOneFontSize:20,lineTwoX:10,lineTwoY:93,lineTwoFontSize:8,idX:194,idY:26,idFontSize:7.5,metaLeftX:5,metaRightX:194,metaY:63,metaFontSize:8},ya=Z({},ci);var H_=["bmsSvg"];function q_(n,a){if(n&1&&O(0,"widget-title",1),n&2){let e=T();R("text",e.displayLabel())("color",e.labelColor())}}function $_(n,a){n&1&&(d(0,"div",3)(1,"div",4),c(2,"No batteries detected"),u(),d(3,"div",5),c(4,"Check Signal K battery paths or select batteries in widget settings."),u()())}var Tl=class n{static BMS_DESCRIPTOR=zi("widget-bms");static ROOT_PATTERN=`${n.BMS_DESCRIPTOR?.selfRootPath??"self.electrical.batteries"}.*`;id=x.required();type=x.required();theme=x.required();renderMode=x(null);static DEFAULT_CONFIG={color:"contrast",ignoreZones:!1,bms:{trackedDevices:[],groups:[],banks:[]}};static VIEWBOX_WIDTH=200;static MIN_VIEWBOX_HEIGHT=1;static BANK_CARD_WIDTH=200;static BATTERY_CARD_HEIGHT=50;static BATTERY_CARD_WIDTH=200;static CARD_GAP=8;static BANK_HEADER_HEIGHT=80;static BANK_MIN_HEIGHT=75;static SINGLE_ROW_BANK_HEIGHT=100;static IN_BANK_COLUMNS=2;static IN_BANK_COLUMN_GAP=5;static IN_BANK_PADDING_X=0;static BANK_GAUGE_RADIUS=50;static BANK_GAUGE_BG_STROKE=10;static BANK_GAUGE_VALUE_STROKE=10;static COMPACT_UNASSIGNED_BATTERY_SCALE=.82;static PATH_BATCH_WINDOW_MS=500;runtime=A(xe);data=A(st);units=A(He);iconRegistry=A(xu);destroyRef=A(Ie);svgRef=he.required("bmsSvg");svg;root;bankLayer;batteryLayer;bankGaugeBackgroundPath=this.buildSemiGaugeArcPath(n.BANK_GAUGE_RADIUS,1);glowFilterId="";renderFrameId=null;pendingRenderSnapshot=null;pathBatchTimerId=null;initialPathPaintDone=!1;pendingPathUpdates=new Map;powerAvailableIconTemplate=null;powerRenewalIconTemplate=null;discoveredBatteryIds=w([]);trackedBatteryDeviceIds=w([]);banks=w([]);cardMode=w({displayMode:"full",metrics:[]});batteries=w({});visibleBatteryIds=L(()=>{let a=this.trackedBatteryDeviceIds();return a.length?a:this.discoveredBatteryIds()});visibleBatteries=L(()=>{let a=this.visibleBatteryIds(),e=this.batteries();return a.map(t=>e[t]).filter(t=>!!t)});bankSummaries=L(()=>{let a=this.banks(),e=this.batteries();return a.map(t=>this.buildBankSummary(t,e))});activeDisplayMode=L(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=L(()=>this.activeDisplayMode()==="compact");colorRole=L(()=>this.runtime.options()?.color??"contrast");ignoreZones=L(()=>this.runtime.options()?.ignoreZones??!1);displayLabel=L(()=>{let a=this.visibleBatteries();return a.length!==1?"Batteries":this.resolveBatteryTitleText(a[0])});labelColor=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a).dim:"var(--kip-contrast-dim-color)"});widgetColors=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a):null});batteryDisplayModels=L(()=>{let a=this.visibleBatteries(),e=this.theme(),t=this.widgetColors(),i=this.ignoreZones(),o={};for(let r of a){let s=ht(r.stateOfChargeState,t?.dimmer??"var(--kip-contrast-dimmer-color)",e,i),l=ht(r.stateOfChargeState,t?.dim??"var(--kip-contrast-dim-color)",e,i),m=ht(r.currentState,"var(--kip-contrast-dim-color)",e,i),h=ht(r.currentState,"var(--kip-contrast-color)",e,i);o[r.id]={id:r.id,titleText:this.resolveBatteryTitleText(r),chargeWidth:(n.BATTERY_CARD_WIDTH-3)*(r.stateOfCharge??0),chargeBarColorCompact:s,chargeBarColorRegular:l,currentTextColorCompact:m,currentTextColorRegular:h,currentText:`${this.formatCurrent(r.current)}`.trim(),detailLineCompact:`${this.formatVoltage(r.voltage)}\xA0\xA0\xA0\xA0${this.formatTemperature(r.temperature)}`,detailLineRegular:`${this.formatVoltage(r.voltage)}\xA0\xA0\xA0\xA0${this.formatPower(r.power)}\xA0\xA0\xA0\xA0${this.formatTemperature(r.temperature)}`.trim(),socText:this.formatSoc(r.stateOfCharge),socGlowEnabled:!i&&(r.stateOfChargeState===J.Warn||r.stateOfChargeState===J.Alarm||r.stateOfChargeState===J.Alert),remainingCapacityText:r.capacityActual?`${this.formatEnergy(r.capacityRemaining)}`:"",remainingTimeText:`${this.formatDuration(r.timeRemaining)}`.trim(),iconKey:r.current!=null&&r.current>0?"power_renewal":"power_available"}}return o});bankDisplayModels=L(()=>{let a=this.bankSummaries(),e=this.widgetColors(),t={};for(let i of a)t[i.id]={id:i.id,titleText:i.name||"Bank",currentText:this.formatCurrent(i.totalCurrent),powerText:this.formatPower(i.totalPower),socText:this.formatSoc(i.avgSoc),remainingTimeText:`${this.formatDuration(i.timeRemaining)}`.trim(),remainingCapacityText:i.remainingCapacity?`${this.formatEnergy(i.remainingCapacity)}`:"",gaugeValuePath:this.buildSemiGaugeArcPath(n.BANK_GAUGE_RADIUS,i.avgSoc),gaugeValueColor:e?.color??"var(--kip-contrast-color)",zoneState:null,zoneColor:null};return t});hasBatteries=L(()=>this.visibleBatteries().length>0);hasBanks=L(()=>this.bankSummaries().length>0);constructor(){W(()=>{let e=this.runtime.options();e&&z(()=>this.applyConfig(e))}),W(()=>{let e=this.bankSummaries(),t=this.visibleBatteries(),i=this.widgetColors(),o=this.batteryDisplayModels(),r=this.bankDisplayModels();!this.svg||!i||this.requestRender({banks:e,batteries:t,batteryDisplayModels:o,bankDisplayModels:r,widgetColors:i})});let a=this.data.subscribePathTreeWithInitial(n.ROOT_PATTERN);if(a.initial.length){for(let e of a.initial)this.enqueuePathUpdate(e,!0);this.flushPendingPathUpdates(),this.initialPathPaintDone=!0}a.live$.pipe(De(this.destroyRef)).subscribe(e=>{this.enqueuePathUpdate(e)})}ngAfterViewInit(){this.initializeSvg(),this.loadPowerIcons(),this.requestRender()}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null}initializeSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${n.MIN_VIEWBOX_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Battery Management System View"),this.glowFilterId=`bms-soc-glow-${this.id()}`;let e=this.svg.append("defs").append("filter").attr("id",this.glowFilterId).attr("x","-30%").attr("y","-30%").attr("width","160%").attr("height","160%");e.append("feFlood").attr("class","bms-soc-glow-flood").attr("flood-color","var(--kip-widget-card-background-color)").attr("flood-opacity",.9).attr("result","color"),e.append("feComposite").attr("in","color").attr("in2","SourceGraphic").attr("operator","in").attr("result","coloredGlow"),e.append("feGaussianBlur").attr("in","coloredGlow").attr("stdDeviation",2).attr("result","blur");let t=e.append("feMerge");t.append("feMergeNode").attr("in","blur"),t.append("feMergeNode").attr("in","blur"),t.append("feMergeNode").attr("in","SourceGraphic"),this.root=this.svg.append("g").attr("class","bms-root"),this.bankLayer=this.root.append("g").attr("class","bms-banks"),this.batteryLayer=this.root.append("g").attr("class","bms-batteries")}loadPowerIcons(){this.loadNamedIcon("power_available",a=>{this.powerAvailableIconTemplate=a}),this.loadNamedIcon("power_renewal",a=>{this.powerRenewalIconTemplate=a})}loadNamedIcon(a,e){this.iconRegistry.getNamedSvgIcon(a).pipe(mi(1)).subscribe({next:t=>{e(t),this.requestRender()},error:()=>{}})}applyConfig(a){let e=this.resolveBmsConfig(a);this.trackedBatteryDeviceIds.set([...new Set((e.trackedDevices??[]).map(t=>t.id))]),this.banks.set(e.banks),this.cardMode.set(this.normalizeCardMode(e.cardMode))}resolveBmsConfig(a){let e=a.bms,t=this.normalizeTrackedDevices(e?.trackedDevices),i=this.normalizeBanksFromGroups(e?.groups),o=this.normalizeBanksFromLegacy(e?.banks);return{trackedDevices:t,groups:i,banks:i.length>0?i:o,cardMode:this.normalizeCardMode(e?.cardMode)}}normalizeTrackedDevices(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(!t||typeof t!="object")return;let i=t,o=typeof i.id=="string"?i.id.trim():"",r=typeof i.source=="string"?i.source.trim():"default";if(!o||!r)return;let s=typeof i.key=="string"&&i.key.trim().length>0?i.key.trim():`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}normalizeCardMode(a){let e=a&&typeof a=="object"?a:null,t=this.normalizeStringList(e?.metrics);return{displayMode:e?.displayMode==="compact"?"compact":"full",metrics:t}}normalizeStringList(a){if(!Array.isArray(a))return[];let e=new Set;return a.forEach(t=>{if(typeof t!="string")return;let i=t.trim();i.length>0&&e.add(i)}),[...e].sort((t,i)=>t.localeCompare(i))}normalizeBanksFromGroups(a){return Array.isArray(a)?a.map(e=>{let t=this.normalizeOptionalString(e?.id)??`bank-${Date.now()}`,i=this.normalizeOptionalString(e?.name)??t,o=this.normalizeStringList(e?.memberIds);return{id:t,name:i,batteryIds:o,connectionMode:this.normalizeConnectionMode(e?.connectionMode)}}).filter(e=>e.id.length>0):[]}normalizeBanksFromLegacy(a){return Array.isArray(a)?a.map(e=>{let t=this.normalizeOptionalString(e?.id)??`bank-${Date.now()}`,i=this.normalizeOptionalString(e?.name)??t,o=this.normalizeStringList(e?.batteryIds);return{id:t,name:i,batteryIds:o,connectionMode:this.normalizeConnectionMode(e?.connectionMode)}}).filter(e=>e.id.length>0):[]}normalizeOptionalString(a){if(typeof a!="string")return null;let e=a.trim();return e.length>0?e:null}normalizeConnectionMode(a){return a==="series"?"series":"parallel"}enqueuePathUpdate(a,e=!1){let t=this.parseBatteryPath(a.path);if(!t)return;let{id:i,key:o}=t,r=a.update?.data?.value??null,s=a.update?.state??null,l=`${i}::${o}`;if(this.pendingPathUpdates.set(l,{id:i,key:o,value:r,state:s}),!e){if(!this.initialPathPaintDone){this.initialPathPaintDone=!0,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates()},n.PATH_BATCH_WINDOW_MS))}}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let a=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(a.map(t=>t.id)).forEach(t=>this.trackDiscoveredBattery(t)),this.batteries.update(t=>{let i=t,o=!1;for(let r of a){let s=i[r.id]??{id:r.id},l=Z({},s),m=this.applyBatteryValue(l,r.key,r.value,r.state),h=!1;if(l.voltage!=null&&l.current!=null){let v=Number.isFinite(l.voltage)&&Number.isFinite(l.current)?l.voltage*l.current:null;Object.is(l.power,v)||(l.power=v,h=!0)}!m&&!h||(o||(i=Z({},i),o=!0),i[r.id]=l)}return o?i:t})}parseBatteryPath(a){let e=a.match(/self\.electrical\.batteries\.([^.]+)\.(.+)$/);return e?{id:e[1],key:e[2]}:null}trackDiscoveredBattery(a){let e=this.discoveredBatteryIds();if(e.includes(a))return;let t=[...e,a].sort();this.discoveredBatteryIds.set(t)}applyBatteryValue(a,e,t,i){switch(e){case"name":{let o=t;return a.name===o?!1:(a.name=o,!0)}case"location":{let o=t;return a.location===o?!1:(a.location=o,!0)}case"associatedBus":{let o=t;return a.associatedBus===o?!1:(a.associatedBus=o,!0)}case"chemistry":{let o=t;return a.chemistry===o?!1:(a.chemistry=o,!0)}case"voltage":{let o=this.toNumber(t);return Object.is(a.voltage,o)?!1:(a.voltage=o,!0)}case"current":{let o=this.toNumber(t),r=!Object.is(a.currentState??null,i??null);return Object.is(a.current,o)&&!r?!1:(a.current=o,a.currentState=i,!0)}case"temperature":{let o=this.toNumber(t);return Object.is(a.temperature,o)?!1:(a.temperature=o,!0)}case"capacity.nominal":{let o=this.toNumber(t);return Object.is(a.capacityNominal,o)?!1:(a.capacityNominal=o,!0)}case"capacity.actual":{let o=this.toNumber(t);return Object.is(a.capacityActual,o)?!1:(a.capacityActual=o,!0)}case"capacity.remaining":{let o=this.toNumber(t);return Object.is(a.capacityRemaining,o)?!1:(a.capacityRemaining=o,!0)}case"capacity.stateOfCharge":{let o=this.toNumber(t),r=!Object.is(a.stateOfChargeState??null,i??null);return Object.is(a.stateOfCharge,o)&&!r?!1:(a.stateOfCharge=o,a.stateOfChargeState=i,!0)}case"capacity.timeRemaining":{let o=this.toNumber(t);return Object.is(a.timeRemaining,o)?!1:(a.timeRemaining=o,!0)}default:return!1}}buildBankSummary(a,e){let t=a.batteryIds.map(h=>e[h]).filter(h=>!!h),i=this.normalizeConnectionMode(a.connectionMode),o=this.calculateBankCurrent(t,i),r=this.sumNumbers(t.map(h=>h.power)),s=this.sumNumbers(t.map(h=>h.capacityRemaining)),l=this.calculateBankSoc(t),m=this.calculateBankTimeRemaining(t,i);return{id:a.id,name:a.name,batteryIds:a.batteryIds,totalCurrent:o,totalPower:r,remainingCapacity:s,avgSoc:l,timeRemaining:m}}calculateBankSoc(a){let e=this.sumNumbers(a.map(o=>o.capacityRemaining)),t=this.sumNumbers(a.map(o=>o.capacityActual));if(e!=null&&t!=null&&t>0)return Math.max(0,Math.min(1,e/t));let i=this.sumNumbers(a.map(o=>o.capacityNominal));return e!=null&&i!=null&&i>0?Math.max(0,Math.min(1,e/i)):this.averageNumbers(a.map(o=>o.stateOfCharge))}calculateBankCurrent(a,e){let t=a.map(i=>i.current);return e==="series"?this.averageNumbers(t):this.sumNumbers(t)}calculateBankTimeRemaining(a,e){let t=a.map(i=>i.timeRemaining);return e==="series"?this.minNumber(t):this.averageNumbers(t)}requestRender(a){this.svg&&(this.pendingRenderSnapshot=a??this.buildRenderSnapshot(),this.pendingRenderSnapshot&&this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let e=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,e&&this.render(e)})))}buildRenderSnapshot(){let a=this.widgetColors();return a?{banks:this.bankSummaries(),batteries:this.visibleBatteries(),batteryDisplayModels:this.batteryDisplayModels(),bankDisplayModels:this.bankDisplayModels(),widgetColors:a}:null}render(a){if(!this.bankLayer||!this.batteryLayer)return;let{banks:e,batteries:t,bankDisplayModels:i,batteryDisplayModels:o,widgetColors:r}=a,s=this.buildRenderLayout(e,t,i,o,this.isCompactCardMode()),m=this.isCompactCardMode()?ci:ci,h=Math.max(n.MIN_VIEWBOX_HEIGHT,s.contentHeight);this.svg?.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${h}`),this.root?.attr("transform",null);let v=this.bankLayer.selectAll("g.bank-card").data(s.banks,re=>re.id),y=v.enter().append("g").attr("class","bank-card"),C=y.append("text").attr("class","bank-card-power");C.append("tspan").attr("class","bank-card-power-value"),C.append("tspan").attr("class","bank-card-power-unit");let S=y.append("text").attr("class","bank-card-current");S.append("tspan").attr("class","bank-card-current-value"),S.append("tspan").attr("class","bank-card-current-unit");let _=y.append("g").attr("class","bank-gauge");_.append("path").attr("class","bank-gauge-bg"),_.append("path").attr("class","bank-gauge-value");let F=_.append("text").attr("class","bank-gauge-soc");F.append("tspan").attr("class","bank-gauge-soc-value"),F.append("tspan").attr("class","bank-gauge-soc-unit");let E=y.append("text").attr("class","bank-actualCapacity");E.append("tspan").attr("class","bank-actualCapacity-value"),E.append("tspan").attr("class","bank-actualCapacity-unit"),y.append("text").attr("class","bank-remaining"),y.append("g").attr("class","bank-bms-batteries"),y.append("text").attr("class","bank-title");let N=y.merge(v);N.attr("transform",re=>`translate(${re.x},${re.y})`),s.banks.length>1?N.select("text.bank-title").attr("x",m.titleX).attr("y",m.titleY).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",m.titleFontSize).text(re=>re.displayModel.titleText):N.select("text.bank-title").text(""),N.select("text.bank-card-current").attr("x",m.lineOneX).attr("y",m.lineOneY).attr("fill","var(--kip-contrast-color)").attr("font-size",m.lineOneFontSize),N.select("tspan.bank-card-current-value").text(re=>this.splitMetricText(re.displayModel.currentText,"A").valueText),N.select("tspan.bank-card-current-unit").attr("dx",1).attr("font-size",12).attr("fill","var(--kip-contrast-color)").text(re=>this.splitMetricText(re.displayModel.currentText,"A").unitText),N.select("text.bank-card-power").attr("x",5).attr("y",42).attr("fill","var(--kip-contrast-color)").attr("font-size",10).attr("opacity",.8),N.select("tspan.bank-card-power-value").text(re=>this.splitMetricText(re.displayModel.powerText,"W").valueText),N.select("tspan.bank-card-power-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-color)").text(re=>this.splitMetricText(re.displayModel.powerText,"W").unitText),N.select("g.bank-gauge").attr("transform","translate(143, 60)"),N.select("path.bank-gauge-bg").attr("d",this.bankGaugeBackgroundPath).attr("fill","none").attr("stroke","var(--kip-contrast-dimmer-color)").attr("stroke-width",n.BANK_GAUGE_BG_STROKE).attr("stroke-linecap","round"),N.select("path.bank-gauge-value").attr("d",re=>re.displayModel.gaugeValuePath).attr("fill","none").attr("stroke",re=>re.displayModel.gaugeValueColor).attr("stroke-width",n.BANK_GAUGE_VALUE_STROKE).attr("stroke-linecap","round"),N.select("text.bank-gauge-soc").attr("x",0).attr("y",-5).attr("text-anchor","middle").attr("fill","var(--kip-contrast-color)").attr("font-size",m.primaryFontSize).attr("font-weight",m.primaryFontWeight),N.select("tspan.bank-gauge-soc-value").text(re=>this.splitMetricText(re.displayModel.socText,"%").valueText),N.select("tspan.bank-gauge-soc-unit").attr("dx",1).attr("font-size",22).attr("font-weight",500).attr("fill","var(--kip-contrast-color)").text(re=>this.splitMetricText(re.displayModel.socText,"%").unitText),N.select("text.bank-remaining").attr("x",143).attr("y",26).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8).text(re=>re.displayModel.remainingTimeText),N.select("text.bank-actualCapacity").attr("x",143).attr("y",66).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8),N.select("tspan.bank-actualCapacity-value").text(re=>this.splitMetricText(re.displayModel.remainingCapacityText,"kWh").valueText),N.select("tspan.bank-actualCapacity-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-dim-color)").text(re=>this.splitMetricText(re.displayModel.remainingCapacityText,"kWh").unitText),N.select("g.bank-bms-batteries").each((re,pe,te)=>{let de=Wt(te[pe]).selectAll("g.battery-card").data(re.batteries,me=>me.key),ce=de.enter().append("g").attr("class","battery-card battery-card--in-bank");this.appendBatteryCardSkeleton(ce);let ue=ce.merge(de);this.renderBatteryCards(ue,r,a.batteries.length>1),de.exit().remove()}),v.exit().remove();let U=this.batteryLayer.selectAll("g.battery-card").data(s.unassignedBatteries,re=>re.key),j=U.enter().append("g").attr("class","battery-card battery-card--unassigned");this.appendBatteryCardSkeleton(j);let B=j.merge(U);this.renderBatteryCards(B,r,!0),U.exit().remove(),this.root?.attr("data-theme","ready")}buildRenderLayout(a,e,t,i,o){let r=new Map(e.map(B=>[B.id,B])),s=new Set,l=this.computeInBankBatterySlotWidth(),m=Math.max(.35,Math.min(1,l/n.BATTERY_CARD_WIDTH)),h=n.BATTERY_CARD_HEIGHT*m,v=0,y=a.map(B=>{let re=new Set,pe=B.batteryIds.map(tt=>r.get(tt)).filter(tt=>!tt||re.has(tt.id)?!1:(re.add(tt.id),!0));pe.forEach(tt=>s.add(tt.id));let te=Math.ceil(pe.length/n.IN_BANK_COLUMNS),se=n.SINGLE_ROW_BANK_HEIGHT,de=!o&&te===1,ce=de?Math.max(0,se-h-n.CARD_GAP):n.BANK_HEADER_HEIGHT,ue=te>0?te*h+(te-1)*n.CARD_GAP:0,me=Math.max(n.BANK_MIN_HEIGHT,ce+ue+n.CARD_GAP),Se=de?se:me,qe=pe.map((tt,Bt)=>{let ri=Bt%n.IN_BANK_COLUMNS,Sn=Math.floor(Bt/n.IN_BANK_COLUMNS),Un=n.IN_BANK_PADDING_X+ri*(l+n.IN_BANK_COLUMN_GAP),wn=ce+7+Sn*(h+n.CARD_GAP);return{id:tt.id,displayModel:i[tt.id],key:`${B.id}::${tt.id}`,x:Un,y:wn,scale:m,inBank:!0,compact:!0}}),pt={id:B.id,name:B.name,batteryIds:B.batteryIds,totalCurrent:B.totalCurrent,totalPower:B.totalPower,avgSoc:B.avgSoc,remainingCapacity:B.remainingCapacity,timeRemaining:B.timeRemaining,displayModel:t[B.id],x:0,y:v,width:n.BANK_CARD_WIDTH,height:Se,batteries:qe};return v+=Se+n.CARD_GAP,pt}),C=y.length>0?v:0,S=o?n.COMPACT_UNASSIGNED_BATTERY_SCALE:1,_=n.BATTERY_CARD_HEIGHT*S,F=e.filter(B=>!s.has(B.id)).sort((B,re)=>B.id.localeCompare(re.id)).map((B,re)=>({id:B.id,displayModel:i[B.id],key:B.id,x:0,y:C+re*(_+n.CARD_GAP),scale:S,inBank:!1,compact:o})),E=y[y.length-1],N=E?E.y+E.height:0,U=F[F.length-1],j=U?U.y+_:0;return{banks:y,unassignedBatteries:F,contentHeight:Math.max(N,j)}}computeInBankBatterySlotWidth(){return(n.BANK_CARD_WIDTH-n.IN_BANK_PADDING_X*2-n.IN_BANK_COLUMN_GAP)/n.IN_BANK_COLUMNS}appendBatteryCardSkeleton(a){a.append("rect").attr("class","bms-battery").attr("rx",4).attr("ry",4),a.append("rect").attr("class","bms-battery-tip").attr("rx",1).attr("ry",1),a.append("rect").attr("class","bms-charge-fill").attr("rx",3).attr("ry",3),a.append("g").attr("class","bms-state-icon"),a.append("text").attr("class","bms-ampere"),a.append("text").attr("class","bms-volt-power");let e=a.append("text").attr("class","bms-soc");e.append("tspan").attr("class","bms-soc-value"),e.append("tspan").attr("class","bms-soc-unit"),a.append("text").attr("class","bms-actualCapacity"),a.append("text").attr("class","bms-remaining"),a.append("text").attr("class","bms-title")}renderBatteryCards(a,e,t){a.attr("transform",i=>`translate(${i.x},${i.y}) scale(${i.scale})`),a.select("rect.bms-battery").attr("width",i=>i.inBank?n.BATTERY_CARD_WIDTH:i.compact?n.BATTERY_CARD_WIDTH-n.CARD_GAP:n.BATTERY_CARD_WIDTH).attr("height",n.BATTERY_CARD_HEIGHT).attr("fill",i=>i.compact?"var(--mat-sys-background)":"var(--kip-contrast-dimmer-color)").attr("stroke","var(--kip-contrast-dimmer-color)").attr("stroke-width",0),a.select("rect.bms-battery-tip").attr("x",n.BATTERY_CARD_WIDTH).attr("y",n.BATTERY_CARD_HEIGHT/2-10).attr("width",4).attr("height",20).attr("fill",i=>i.compact?"var(--mat-sys-background)":"var(--kip-contrast-dimmer-color)").attr("stroke",e.color).attr("stroke-width",0),a.select("rect.bms-charge-fill").attr("x",1.5).attr("y",1.5).attr("width",i=>i.displayModel.chargeWidth).attr("height",n.BATTERY_CARD_HEIGHT-3).attr("fill",i=>i.compact?i.displayModel.chargeBarColorCompact:i.displayModel.chargeBarColorRegular),t?a.select("text.bms-title").attr("x",5).attr("y",i=>i.compact?11:14).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",i=>i.compact?8:12).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(i=>i.displayModel.titleText):a.select("text.bms-title").text(""),a.select("text.bms-ampere").attr("x",10).attr("y",33).attr("fill",i=>i.compact?i.displayModel.currentTextColorCompact:i.displayModel.currentTextColorRegular).attr("font-size",16).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(i=>i.displayModel.currentText),a.select("text.bms-volt-power").attr("x",10).attr("y",45).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",8).attr("opacity",.8).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(i=>i.compact?i.displayModel.detailLineCompact:i.displayModel.detailLineRegular),a.select("text.bms-soc").attr("x",n.BATTERY_CARD_WIDTH-33).attr("y",34).attr("fill",i=>i.compact?"var(--kip-contrast-dim-color)":"var(--kip-contrast-color)").attr("text-anchor","middle").attr("font-size",25).attr("font-weight",700).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null),a.select("tspan.bms-soc-value").text(i=>this.splitMetricText(i.displayModel.socText,"%").valueText),a.select("tspan.bms-soc-unit").attr("dx",1).attr("font-size",16).attr("font-weight",500).text(i=>this.splitMetricText(i.displayModel.socText,"%").unitText),a.select("text.bms-actualCapacity").attr("x",n.BATTERY_CARD_WIDTH-33).attr("y",45).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(i=>i.compact?"":i.displayModel.remainingCapacityText),a.select("text.bms-remaining").attr("x",n.BATTERY_CARD_WIDTH-33).attr("y",12).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",6).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(i=>i.compact?"":i.displayModel.remainingTimeText),a.select("g.bms-state-icon").attr("transform",`translate(${n.BATTERY_CARD_WIDTH/2-18}, ${n.BATTERY_CARD_HEIGHT/2-18})`).attr("display",i=>i.compact&&i.scale<.45?"none":null).attr("color",i=>i.compact?e.dim:e.color).attr("filter",i=>i.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).each((i,o,r)=>{let s=Wt(r[o]),l=i.displayModel.iconKey,m=l==="power_renewal"?this.powerRenewalIconTemplate:this.powerAvailableIconTemplate;if(!m){s.selectAll("*").remove(),s.attr("data-icon-key",null);return}let h=s.node();if(!h||s.attr("data-icon-key")===l&&h.firstElementChild)return;s.selectAll("*").remove();let y=m.cloneNode(!0);y.removeAttribute("id"),y.setAttribute("width","36"),y.setAttribute("height","36"),y.getAttribute("viewBox")||y.setAttribute("viewBox","0 0 24 24"),h.appendChild(y),s.attr("data-icon-key",l)})}formatVoltage(a){return a==null?"-- V":`${a.toFixed(1)}V`}formatCurrent(a){return a==null?"-- A":`${a.toFixed(1)}A`}formatPower(a){return a==null?"":`${a.toFixed(0)}W`}formatEnergy(a){return a==null?"":(a=this.units.convertToUnit("kWh",a),`${a}kWh`)}formatSoc(a){return a==null?"--%":`${Math.round(a*100)}%`}resolveBatteryTitleText(a){return a.name||`Battery ${a.id}`}formatDuration(a){if(a==null)return"";let e=this.units.convertToUnit("D HH:MM:SS",a);return e==null?"":typeof e=="string"?e:`${e}`}formatTemperature(a){if(a==null||typeof a!="number")return"";let e=this.units.getDefaults().Temperature,t=this.units.convertToUnit(e,a);return t===null?"":`${t.toFixed(1)} ${e==="celsius"?"\xB0C":"\xB0F"}`}splitMetricText(a,e){if(!a)return{valueText:"",unitText:""};let t=a.trim();return t?t.endsWith(e)?{valueText:t.slice(0,Math.max(0,t.length-e.length)).trim(),unitText:e}:{valueText:t,unitText:""}:{valueText:"",unitText:""}}sumNumbers(a){let e=a.filter(t=>typeof t=="number");return e.length?e.reduce((t,i)=>t+i,0):null}averageNumbers(a){let e=a.filter(t=>typeof t=="number");return e.length?e.reduce((t,i)=>t+i,0)/e.length:null}minNumber(a){let e=a.filter(t=>typeof t=="number");return e.length?Math.min(...e):null}toNumber(a){return a==null||typeof a!="number"?null:a}buildSemiGaugeArcPath(a,e){let t=Math.max(0,Math.min(1,e??0)),i=-Math.PI*.55,o=Math.PI*1.1,r=i+o*t;if(t<=0){let s=a*Math.cos(i),l=a*Math.sin(i);return`M ${s} ${l}`}return Id()({innerRadius:a,outerRadius:a,startAngle:i,endAngle:r})??""}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["widget-bms"]],viewQuery:function(e,t){e&1&&_e(t.svgRef,H_,5),e&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:4,consts:[["bmsSvg",""],[3,"text","color"],["aria-hidden","false",1,"bms-svg"],[1,"bms-empty"],[1,"bms-empty-title"],[1,"bms-empty-sub"]],template:function(e,t){e&1&&(I(0,q_,1,2,"widget-title",1),oe(),O(1,"svg",2,0),I(3,$_,5,0,"div",3)),e&2&&(P(t.hasBanks()?0:-1),f(),dt("bms-svg--full",!t.hasBanks()),f(2),P(t.hasBatteries()?-1:3))},dependencies:[Xe,Vt],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.bms-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;padding:0 10px 10px}.bms-svg.bms-svg--full[_ngcontent-%COMP%]{top:0;height:100%;padding-top:10px}.bms-card-metric[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:30px;font-weight:700}.bms-card-sub[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:18px;opacity:.9}.bms-card-meta[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:15px;opacity:.75}.bms-card-footer[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:16px;opacity:.8}.bms-flow-line[_ngcontent-%COMP%]{stroke:var(--kip-zone-nominal-color);stroke-width:3px;stroke-dasharray:6 6;animation:_ngcontent-%COMP%_flow-dash 2s linear infinite}.bms-flow-line--out[_ngcontent-%COMP%]{stroke:var(--kip-zone-warn-color)}.bms-flow-line--in[_ngcontent-%COMP%]{stroke:var(--kip-zone-nominal-color)}.bms-flow-line--neutral[_ngcontent-%COMP%]{stroke:var(--kip-widget-card-border-color);animation:none}.bms-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.bms-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.bms-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}@keyframes _ngcontent-%COMP%_flow-dash{to{stroke-dashoffset:-12}}"],changeDetection:0})};var j_=["solarSvg"];function Y_(n,a){n&1&&(d(0,"div",3)(1,"div",4),c(2,"No solar chargers detected"),u(),d(3,"div",5),c(4,"Check Signal K solar paths or select chargers in widget settings."),u()())}var kl=class n{static SOLAR_DESCRIPTOR=zi("widget-solar-charger");static SELF_ROOT_PATH=(()=>{let a=n.SOLAR_DESCRIPTOR?.selfRootPath;if(!a)throw new Error("[WidgetSolarChargerComponent] Descriptor missing or selfRootPath not set; check widget registration.");return a})();static ROOT_PATTERN=`${n.SELF_ROOT_PATH}.*`;id=x.required();type=x.required();theme=x.required();renderMode=x(null);static DEFAULT_CONFIG={color:"contrast",ignoreZones:!1,solarCharger:{trackedDevices:[],optionsById:{}}};static VIEWBOX_WIDTH=200;static CARD_HEIGHT=100;static CARD_GAP=8;static SOLAR_PANEL_SYMBOL_WIDTH=158.90796;static SOLAR_PANEL_SYMBOL_HEIGHT=94.949027;static SOLAR_PANEL_SCALE=.77;static SOLAR_PANEL_TRANSLATE_X=-36;static SOLAR_PANEL_TRANSLATE_Y=0;static SOLAR_PANEL_X=(135+n.SOLAR_PANEL_TRANSLATE_X)*n.SOLAR_PANEL_SCALE;static SOLAR_PANEL_Y=(0+n.SOLAR_PANEL_TRANSLATE_Y)*n.SOLAR_PANEL_SCALE;static SOLAR_PANEL_WIDTH=n.SOLAR_PANEL_SYMBOL_WIDTH*n.SOLAR_PANEL_SCALE;static SOLAR_PANEL_HEIGHT=n.SOLAR_PANEL_SYMBOL_HEIGHT*n.SOLAR_PANEL_SCALE;static PATH_BATCH_WINDOW_MS=500;runtime=A(xe);data=A(st);units=A(He);destroyRef=A(Ie);displayLabel=L(()=>{let a=this.visibleSolarUnits();return a.length!==1?"Solar Chargers":this.resolveTitleText(a[0])});labelColor=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a).dim:"var(--kip-contrast-dim-color)"});svgRef=he.required("solarSvg");svg;layer;glowFilterId="";renderFrameId=null;pendingRenderSnapshot=null;pathBatchTimerId=null;initialPathPaintDone=!1;pendingPathUpdates=new Map;discoveredSolarIds=w([]);trackedDevices=w([]);optionsById=w({});cardMode=w({displayMode:"full",metrics:["panelVoltage","panelCurrent","voltage","current"]});chargersByKey=w({});visibleSolarKeys=L(()=>{let a=this.trackedDevices();if(a.length)return a.map(i=>i.key);let e=this.chargersByKey(),t=new Set(this.discoveredSolarIds());return Object.keys(e).filter(i=>{let o=e[i];return!!o&&t.has(o.id)}).sort((i,o)=>i.localeCompare(o))});visibleSolarUnits=L(()=>{let a=this.visibleSolarKeys(),e=this.chargersByKey();return a.map(t=>e[t]).filter(t=>!!t)});activeDisplayMode=L(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=L(()=>this.activeDisplayMode()==="compact");colorRole=L(()=>this.runtime.options()?.color??"contrast");ignoreZones=L(()=>this.runtime.options()?.ignoreZones??!1);widgetColors=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a):null});displayModels=L(()=>{let a=this.visibleSolarUnits(),e=this.optionsById(),t=this.theme(),i=this.widgetColors(),o=this.ignoreZones()??!1,r={};for(let s of a){let l=e[s.id]?.arrayRatedPowerW??null,m=s.panelPower??null,h=this.formatPowerAuto(m),v=l&&l>0&&m!=null?Math.max(0,Math.min(1,m/l)):0,y=s.panelPowerState??s.panelCurrentState??null,C=s.currentState??null,S=ht(y,i?.dim??"var(--kip-contrast-dim-color)",t,o),_=!o&&(y===J.Warn||y===J.Alarm||y===J.Alert),F=ht(C,"var(--kip-contrast-color)",t,o),E=this.resolveMostSevereState(s.voltageState??null,s.temperatureState??null),N=ht(E,"var(--kip-contrast-color)",t,o),U=this.resolveMostSevereState(s.panelCurrentState??null,s.panelVoltageState??null,s.panelTemperatureState??null),j=ht(U,"var(--kip-contrast-color)",t,o),B=!o&&(U===J.Warn||U===J.Alarm||U===J.Alert),re=ht(s.loadCurrentState??null,"var(--kip-contrast-color)",t,o),pe=this.valueOrDash(s.controllerMode),te=this.isRelayActive(s.load),se=te?`${this.formatRelayState(s.load)}\xA0\xA0\xA0\xA04.5A${this.formatCurrent(s.loadCurrent)}`.trim():"",de=s.yieldToday!=null?`${this.formatEnergyYield(s.yieldToday)} Today`:"",ce=s.yieldYesterday!=null?`${this.formatEnergyYield(s.yieldYesterday)} Yesterday`:"",ue=s.deviceKey??s.id;r[ue]={id:s.id,source:s.source??null,deviceKey:s.deviceKey,titleText:this.resolveTitleText(s),panelPowerText:h.value,panelPowerUnitText:h.unit,panelPowerColor:S,panelPowerGlowEnabled:_,chargerCurrentTextColor:F,chargerMetaTextColor:N,panelValuesTextColor:j,panelValuesGlowEnabled:B,gaugeProgress:v,gaugeSectionText:`${this.formatVoltage(s.panelVoltage)}`+(s.panelCurrent!=null?`, ${this.formatCurrent(s.panelCurrent)}`:"")+(s.panelTemperature!=null?`, ${this.formatTemperature(s.panelTemperature)}`:""),yieldTodayText:de,yieldYesterdayText:ce,chargerSectionCurrent:`${this.formatCurrent(s.current)}`,chargerMode:`${pe.charAt(0).toUpperCase()+pe.slice(1)} mode`,chargerSectionMetadata:`${s.voltage!=null?this.formatVoltage(s.voltage):""}\xA0\xA0\xA0\xA0${s.temperature!=null?this.formatTemperature(s.temperature):""}`.trim(),relaySectionVisible:te,relaySectionText:se,relayValuesTextColor:re}}return r});hasChargers=L(()=>this.visibleSolarUnits().length>0);constructor(){W(()=>{let e=this.runtime.options();e&&z(()=>{this.applyConfig(e)})}),W(()=>{let e=this.displayModels(),t=this.visibleSolarUnits(),i=this.widgetColors();!this.svg||!i||this.requestRender({solarUnits:t,displayModels:e,widgetColors:i})});let a=this.data.subscribePathTreeWithInitial(n.ROOT_PATTERN);if(a.initial.length){for(let e of a.initial)this.enqueuePathUpdate(e,!0);this.flushPendingPathUpdates(),this.initialPathPaintDone=!0}a.live$.pipe(De(this.destroyRef)).subscribe(e=>{this.enqueuePathUpdate(e)})}ngAfterViewInit(){this.initializeSvg(),this.requestRender()}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null}initializeSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${n.CARD_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Solar Charger View"),this.glowFilterId=`solar-panel-glow-${this.id()}`;let e=this.svg.append("defs").append("filter").attr("id",this.glowFilterId).attr("x","-30%").attr("y","-30%").attr("width","160%").attr("height","160%");e.append("feFlood").attr("class","solar-panel-glow-flood").attr("flood-color","var(--kip-widget-card-background-color)").attr("flood-opacity",.9).attr("result","color"),e.append("feComposite").attr("in","color").attr("in2","SourceGraphic").attr("operator","in").attr("result","coloredGlow"),e.append("feGaussianBlur").attr("in","coloredGlow").attr("stdDeviation",2).attr("result","blur");let t=e.append("feMerge");t.append("feMergeNode").attr("in","blur"),t.append("feMergeNode").attr("in","blur"),t.append("feMergeNode").attr("in","SourceGraphic"),this.layer=this.svg.append("g").attr("class","solar-layer")}applyConfig(a){let e=this.resolveSolarConfig(a);this.trackedDevices.set(e.trackedDevices??[]),this.reprojectSnapshotsToDeviceKeys(e.trackedDevices??[]),this.optionsById.set(e.optionsById??{}),this.cardMode.set(this.normalizeCardMode(e.cardMode))}resolveSolarConfig(a){let e=a.solarCharger,t=this.normalizeTrackedDevices(e?.trackedDevices),i=this.normalizeOptionsById(e?.optionsById);return{trackedDevices:t,optionsById:i,cardMode:this.normalizeCardMode(e?.cardMode)}}normalizeTrackedDevices(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(typeof t=="string"){let l=t.trim();if(!l)return;let m=`${l}||default`;e.set(m,{id:l,source:"default",key:m});return}if(!t||typeof t!="object")return;let i=t,o=typeof i.id=="string"?i.id.trim():"",r=typeof i.source=="string"?i.source.trim():"default";if(!o||!r)return;let s=typeof i.key=="string"&&i.key.trim().length>0?i.key.trim():`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}reprojectSnapshotsToDeviceKeys(a){if(!a.length)return;let e=new Map;a.forEach(t=>{let i=e.get(t.id)??[];i.push(t.key),e.set(t.id,i)}),this.chargersByKey.update(t=>{let i=t,o=!1;return e.forEach((r,s)=>{let l=t[s];if(l){for(let m of r){if(t[m])continue;let h=a.find(v=>v.key===m);o||(i=Z({},t),o=!0),i[m]=ge(Z({},l),{source:h?.source??null,deviceKey:m})}o&&i[s]?.deviceKey===void 0&&delete i[s]}}),o?i:t})}normalizeCardMode(a){let e=a&&typeof a=="object"?a:null,t=this.normalizeStringList(e?.metrics);return{displayMode:e?.displayMode==="compact"?"compact":"full",metrics:t.length?t:["panelVoltage","panelCurrent","voltage","current"]}}normalizeStringList(a){if(!Array.isArray(a))return[];let e=new Set;return a.forEach(t=>{if(typeof t!="string")return;let i=t.trim();i.length>0&&e.add(i)}),[...e].sort((t,i)=>t.localeCompare(i))}normalizeOptionsById(a){if(!a||typeof a!="object")return{};let e=Object.entries(a),t={};return e.forEach(([i,o])=>{let r=this.normalizeOptionalString(i);if(!r)return;let s=o?.arrayRatedPowerW;t[r]={arrayRatedPowerW:typeof s=="number"&&Number.isFinite(s)?s:null}}),t}normalizeOptionalString(a){if(typeof a!="string")return null;let e=a.trim();return e.length>0?e:null}enqueuePathUpdate(a,e=!1){let t=this.parseSolarPath(a.path);if(!t)return;let{id:i,key:o}=t,r=a.update?.data?.value??null,s=a.update?.state??null,l=`${i}::${o}`;if(this.pendingPathUpdates.set(l,{id:i,key:o,value:r,state:s}),!e){if(!this.initialPathPaintDone){this.initialPathPaintDone=!0,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates()},n.PATH_BATCH_WINDOW_MS))}}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let a=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(a.map(t=>t.id)).forEach(t=>this.trackDiscoveredSolar(t)),this.chargersByKey.update(t=>{let i=t,o=!1,r=this.trackedDevices(),s=r.length>0,l=new Map;s&&r.forEach(m=>{let h=l.get(m.id)??[];h.push(m.key),l.set(m.id,h)});for(let m of a){let h=s?l.get(m.id)??[]:[m.id];for(let v of h){let y=r.find(U=>U.key===v),C=i[v]??{id:m.id,source:y?.source??null,deviceKey:s?v:void 0},S=Z({},C),_=this.applyChargerValue(S,m.key,m.value,m.state),F=!1,E=this.resolvePowerValue(S.rawBatteryPower,S.voltage,S.current);Object.is(S.power,E)||(S.power=E,F=!0);let N=this.resolvePowerValue(S.rawPanelPower,S.panelVoltage,S.panelCurrent);Object.is(S.panelPower,N)||(S.panelPower=N,F=!0),!(!_&&!F)&&(o||(i=Z({},i),o=!0),i[v]=S)}}return o?i:t})}parseSolarPath(a){let e=a.match(/self\.electrical\.solar\.([^.]+)\.(.+)$/);if(!e)return null;let t=e[1],i=e[2],o=this.normalizeSolarMetricKey(i);return{id:t,key:o}}normalizeSolarMetricKey(a){if(a.startsWith("controller."))return a.slice(11);switch(a){case"solar.power":return"panelPower";case"solar.voltage":return"panelVoltage";case"solar.current":return"panelCurrent";case"solar.temperature":return"panelTemperature";case"charge.status":return"controllerMode";default:return a}}trackDiscoveredSolar(a){let e=this.discoveredSolarIds();e.includes(a)||this.discoveredSolarIds.set([...e,a].sort())}applyChargerValue(a,e,t,i){switch(e){case"name":return this.setValue(a,"name",this.toStringValue(t));case"location":return this.setValue(a,"location",this.toStringValue(t));case"associatedBus":return this.setValue(a,"associatedBus",this.toStringValue(t));case"voltage":{let o=this.toNumber(t,"V"),r=!Object.is(a.voltageState??null,i??null);return Object.is(a.voltage,o)&&!r?!1:(a.voltage=o,a.voltageState=i,!0)}case"current":{let o=this.toNumber(t,"A"),r=!Object.is(a.currentState??null,i??null);return Object.is(a.current,o)&&!r?!1:(a.current=o,a.currentState=i,!0)}case"power":return this.setPowerPathValue(a,"rawBatteryPower",t);case"temperature":{let o=this.toNumber(t,this.units.getDefaults().Temperature),r=!Object.is(a.temperatureState??null,i??null);return Object.is(a.temperature,o)&&!r?!1:(a.temperature=o,a.temperatureState=i,!0)}case"chargingAlgorithm":return this.setValue(a,"chargingAlgorithm",this.toStringValue(t));case"chargerRole":return this.setValue(a,"chargerRole",this.toStringValue(t));case"chargingMode":return this.setValue(a,"chargingMode",this.toStringValue(t));case"setpointVoltage":return this.setValue(a,"setpointVoltage",this.toNumber(t,"V"));case"setpointCurrent":return this.setValue(a,"setpointCurrent",this.toNumber(t,"A"));case"controllerMode":return this.setValue(a,"controllerMode",this.toStringValue(t));case"panelVoltage":{let o=this.toNumber(t,"V"),r=!Object.is(a.panelVoltageState??null,i??null);return Object.is(a.panelVoltage,o)&&!r?!1:(a.panelVoltage=o,a.panelVoltageState=i,!0)}case"panelCurrent":{let o=this.toNumber(t,"A"),r=!Object.is(a.panelCurrentState??null,i??null);return Object.is(a.panelCurrent,o)&&!r?!1:(a.panelCurrent=o,a.panelCurrentState=i,!0)}case"panelPower":{let o=this.toNumber(t,"W"),r=!Object.is(a.panelPowerState??null,i??null);return Object.is(a.rawPanelPower,o)&&!r?!1:(a.rawPanelPower=o,a.panelPowerState=i,!0)}case"yieldToday":return this.setValue(a,"yieldToday",this.toNumber(t,"kWh"));case"yieldYesterday":return this.setValue(a,"yieldYesterday",this.toNumber(t,"kWh"));case"panelTemperature":{let o=this.toNumber(t,this.units.getDefaults().Temperature),r=!Object.is(a.panelTemperatureState??null,i??null);return Object.is(a.panelTemperature,o)&&!r?!1:(a.panelTemperature=o,a.panelTemperatureState=i,!0)}case"load":case"loadState":case"load.state":return this.setValue(a,"load",t);case"loadCurrent":{let o=this.toNumber(t,"A"),r=!Object.is(a.loadCurrentState??null,i??null);return Object.is(a.loadCurrent,o)&&!r?!1:(a.loadCurrent=o,a.loadCurrentState=i,!0)}default:return!1}}setPowerPathValue(a,e,t){let i=this.toNumber(t,"W");return this.setValue(a,e,i)}setValue(a,e,t){return Object.is(a[e],t)?!1:(a[e]=t,!0)}resolvePowerValue(a,e,t){if(a!=null)return a;if(e!=null&&t!=null)return e*t}requestRender(a){this.svg&&(this.pendingRenderSnapshot=a??this.buildRenderSnapshot(),this.pendingRenderSnapshot&&this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let e=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,e&&this.render(e)})))}buildRenderSnapshot(){let a=this.widgetColors();return a?{solarUnits:this.visibleSolarUnits(),displayModels:this.displayModels(),widgetColors:a}:null}render(a){if(!this.layer||!this.svg)return;let t=this.isCompactCardMode()?ci:ci,i=a.solarUnits.map((C,S)=>({key:C.deviceKey??C.id,model:a.displayModels[C.deviceKey??C.id],y:S*(n.CARD_HEIGHT+n.CARD_GAP)})),o=i.length?i[i.length-1].y+n.CARD_HEIGHT:n.CARD_HEIGHT;this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${o}`);let r=this.layer.selectAll("g.solar-card").data(i,C=>C.key),s=r.enter().append("g").attr("class","solar-card");s.append("text").attr("class","solar-charger-title");let l=s.append("text").attr("class","solar-charger-current");l.append("tspan").attr("class","current-metric-value"),l.append("tspan").attr("class","current-metric-unit"),s.append("text").attr("class","solar-charger"),s.append("text").attr("class","solar-charger-meta"),s.append("text").attr("class","solar-relay-label"),s.append("text").attr("class","solar-relay-values"),s.append("text").attr("class","solar-panel-values"),s.append("text").attr("class","solar-yield-label"),s.append("text").attr("class","solar-yield-today"),s.append("text").attr("class","solar-yield-yesterday");let m=s.append("g").attr("class","solar-panel-icon").attr("transform",`translate(${n.SOLAR_PANEL_X}, ${n.SOLAR_PANEL_Y})`);m.append("use").attr("class","solar-panel-bg").attr("href","assets/svg/symbols.svg#solar-panel-cells").attr("x",0).attr("y",0).attr("width",n.SOLAR_PANEL_WIDTH).attr("height",n.SOLAR_PANEL_HEIGHT);let h=m.append("g").attr("class","solar-panel-progress");h.append("defs").append("clipPath").attr("clipPathUnits","objectBoundingBox").attr("id",C=>`solar-panel-clip-${this.id()}-${C.key}`).append("rect").attr("x",0).attr("y",0).attr("height",1).attr("width",0),h.append("use").attr("class","solar-panel-colored").attr("href","assets/svg/symbols.svg#solar-panel-cells").attr("x",0).attr("y",0).attr("width",n.SOLAR_PANEL_WIDTH).attr("height",n.SOLAR_PANEL_HEIGHT).attr("clip-path",C=>`url(#solar-panel-clip-${this.id()}-${C.key})`);let v=s.append("text").attr("class","solar-panel-power");v.append("tspan").attr("class","solar-panel-power-value"),v.append("tspan").attr("class","solar-panel-power-unit");let y=s.merge(r);y.attr("transform",C=>`translate(0, ${C.y})`),a.solarUnits.length>1?y.select("text.solar-charger-title").attr("x",t.titleX).attr("y",t.titleY).attr("font-size",t.titleFontSize).attr("fill","var(--kip-contrast-dim-color)").text(C=>a.displayModels[C.key]?.titleText??this.displayName(C.model)):y.select("text.solar-charger-title").text(""),y.select("text.solar-charger-current").attr("x",t.lineOneX).attr("y",t.lineOneY).attr("font-size",t.lineOneFontSize).attr("fill",C=>C.model.chargerCurrentTextColor),y.select("tspan.current-metric-value").text(C=>C.model.chargerSectionCurrent),y.select("tspan.current-metric-unit").attr("dx",1).attr("font-size",12).attr("fill","var(--kip-contrast-color)").text("A"),y.select("text.solar-charger").attr("x",5).attr("y",40).attr("fill","var(--kip-contrast-color)").attr("font-size",8).attr("opacity",.8).text(C=>C.model.chargerMode),y.select("text.solar-charger-meta").attr("x",t.metaLeftX).attr("y",48).attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",C=>C.model.chargerMetaTextColor).text(C=>C.model.chargerSectionMetadata),y.select("text.solar-relay-label").attr("x",5).attr("y",73).attr("font-size",10).attr("fill","var(--kip-contrast-color)").text(C=>C.model.relaySectionVisible?"Load Output":""),y.select("text.solar-relay-values").attr("x",10).attr("y",83).attr("font-size",t.lineTwoFontSize).attr("fill",C=>C.model.relayValuesTextColor).attr("opacity",C=>C.model.relaySectionVisible?.8:0).text(C=>C.model.relaySectionText),y.select("g.solar-panel-icon").attr("transform",`translate(${n.SOLAR_PANEL_X}, ${n.SOLAR_PANEL_Y})`),y.select("use.solar-panel-bg").attr("color","var(--kip-contrast-dimmer-color)"),y.select("g.solar-panel-progress").each((C,S,_)=>{Wt(_[S]).select("rect").attr("x",0).attr("y",0).attr("height",1).attr("width",Math.max(0,Math.min(1,C.model.gaugeProgress))),this.debugSolarLayout(C.key,C.model.gaugeProgress)}),y.select("use.solar-panel-colored").attr("color",C=>C.model.panelPowerColor),y.select("text.solar-panel-power").attr("x",137.5).attr("y",t.primaryY).attr("text-anchor","middle").attr("font-size",t.primaryFontSize).attr("font-weight",t.primaryFontWeight).attr("filter",C=>C.model.panelPowerGlowEnabled?`url(#${this.glowFilterId})`:null).attr("fill","var(--kip-contrast-color)"),y.select("tspan.solar-panel-power-value").text(C=>C.model.panelPowerText),y.select("tspan.solar-panel-power-unit").attr("dx",C=>C.model.panelPowerUnitText?1:0).attr("font-size",20).attr("font-weight",500).attr("fill","var(--kip-contrast-color)").attr("opacity",C=>C.model.panelPowerUnitText?1:0).text(C=>C.model.panelPowerUnitText),y.select("text.solar-panel-values").attr("x",137.5).attr("y",60).attr("text-anchor","middle").attr("font-size",10).attr("font-weight",500).attr("opacity",.8).attr("filter",C=>C.model.panelValuesGlowEnabled?`url(#${this.glowFilterId})`:null).attr("fill",C=>C.model.panelValuesTextColor).text(C=>C.model.gaugeSectionText).raise(),y.select("text.solar-yield-label").attr("x",104).attr("y",88).attr("text-anchor","middle").attr("font-size",8).attr("fill","var(--kip-contrast-dim-color)").attr("opacity",.8).text("Yield (kWh):"),y.select("text.solar-yield-today").attr("x",130).attr("y",88).attr("text-anchor","start").attr("font-size",8).attr("fill","var(--kip-contrast-dim-color)").attr("opacity",.8).text(C=>C.model.yieldTodayText),y.select("text.solar-yield-yesterday").attr("x",130).attr("y",97.5).attr("text-anchor","start").attr("font-size",8).attr("fill","var(--kip-contrast-dim-color)").attr("opacity",.8).text(C=>C.model.yieldYesterdayText),r.exit().remove()}displayName(a){return a.name?.trim()||a.id}resolveTitleText(a){return a.name||`Solar ${a.id}`}toNumber(a,e){return a==null||typeof a!="number"?null:this.units.convertToUnit(e,a)??a}isRelayActive(a){if(a==null)return!1;if(typeof a=="boolean")return a;if(typeof a=="number")return a>0;let e=a.trim().toLowerCase();return!(!e||e==="off"||e==="false"||e==="0")}toStringValue(a){return typeof a=="string"?a:a==null?null:`${a}`}valueOrDash(a){return a===null?"--":a===void 0?"":a}formatVoltage(a){return a===null?"--":a===void 0?"":`${a.toFixed(1)}V`}formatCurrent(a){return a===null?"--":a===void 0?"":`${a.toFixed(1)}`}formatTemperature(a){return a===null?"--":a===void 0?"":`${a.toFixed(1)} ${this.units.getDefaults().Temperature==="celsius"?"\xB0C":"\xB0F"}`}formatRelayState(a){return a===null?"--":a===void 0?"":typeof a=="boolean"?a?"On":"Off":typeof a=="number"?a>0?"On":"Off":a}formatPowerAuto(a){return a===null?{value:"--",unit:""}:a===void 0?{value:"",unit:""}:Math.abs(a)>=1e3?{value:(a/1e3).toFixed(2),unit:"kW"}:{value:a.toFixed(0),unit:"W"}}formatEnergyYield(a){return a===null?"--":a===void 0?"":`${a.toFixed(2)}`}resolveMostSevereState(...a){let e=null,t={[J.Normal]:0,[J.Nominal]:1,[J.Alert]:2,[J.Warn]:3,[J.Alarm]:4,[J.Emergency]:5};for(let i of a)i&&(!e||t[i]>t[e])&&(e=i);return e}debugSolarLayout(a,e){typeof window<"u"&&window.__KIP_DEBUG_SOLAR_LAYOUT===!0&&console.debug("[solar-layout]",{id:a,gaugeProgress:e,panelX:n.SOLAR_PANEL_X,panelY:n.SOLAR_PANEL_Y,panelWidth:n.SOLAR_PANEL_WIDTH,panelHeight:n.SOLAR_PANEL_HEIGHT,clippedWidth:n.SOLAR_PANEL_WIDTH*e})}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["widget-solar-charger"]],viewQuery:function(e,t){e&1&&_e(t.svgRef,j_,5),e&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:3,consts:[["solarSvg",""],[3,"text","color"],["aria-hidden","false",1,"solar-svg"],[1,"solar-empty"],[1,"solar-empty-title"],[1,"solar-empty-sub"]],template:function(e,t){e&1&&(O(0,"widget-title",1),oe(),O(1,"svg",2,0),I(3,Y_,5,0,"div",3)),e&2&&(R("text",t.displayLabel())("color",t.labelColor()),f(3),P(t.hasChargers()?-1:3))},dependencies:[Vt],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.solar-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 10px 10px}.solar-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.solar-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.solar-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}"],changeDetection:0})};var K_=["chargerSvg"];function X_(n,a){n&1&&(d(0,"div",3)(1,"div",4),c(2,"No chargers detected"),u(),d(3,"div",5),c(4,"Check Signal K charger paths or select chargers in widget settings."),u()())}function Z_(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Dl=class n{static CHARGER_DESCRIPTOR=zi("widget-charger");static SELF_ROOT_PATH=(()=>{let a=n.CHARGER_DESCRIPTOR?.selfRootPath;if(!a)throw new Error("[WidgetChargerComponent] Descriptor missing or selfRootPath not set; check widget registration.");return a})();static ROOT_PATTERN=`${n.SELF_ROOT_PATH}.*`;static PATH_REGEX=new RegExp(`^${Z_(n.SELF_ROOT_PATH)}\\.([^.]+)\\.(.+)$`);static VIEWBOX_WIDTH=200;static CARD_HEIGHT=100;static COMPACT_CARD_HEIGHT=100;static CARD_GAP=8;static PATH_BATCH_WINDOW_MS=500;static CHARGER_DISPLAY_BASE_WIDTH=145;static CHARGER_DISPLAY_BASE_HEIGHT=37;static CHARGER_DISPLAY_HORIZONTAL_MARGIN=40;static DEFAULT_CONFIG={color:"contrast",ignoreZones:!1,charger:{trackedDevices:[],optionsById:{}}};id=x.required();type=x.required();theme=x.required();renderMode=x(null);runtime=A(xe);data=A(st);units=A(He);destroyRef=A(Ie);svgRef=he.required("chargerSvg");svg;layer;pendingPathUpdates=new Map;pathBatchTimerId=null;initialPathPaintDone=!1;renderFrameId=null;pendingRenderSnapshot=null;discoveredChargerIds=w([]);trackedDevices=w([]);chargersByKey=w({});visibleChargerKeys=L(()=>{let a=this.trackedDevices();if(a.length)return a.map(r=>r.key);let e=this.chargersByKey(),t=new Set(this.discoveredChargerIds()),i=Object.keys(e).filter(r=>{let s=e[r];return!!s&&t.has(s.id)}).sort((r,s)=>r.localeCompare(s)),o=new Map;return i.forEach(r=>{let s=e[r];s&&r!==s.id&&o.set(s.id,!0)}),i.filter(r=>{let s=e[r];return s?r!==s.id?!0:!o.get(s.id):!1})});visibleChargers=L(()=>{let a=this.visibleChargerKeys(),e=this.chargersByKey();return a.map(t=>e[t]).filter(t=>!!t)});hasChargers=L(()=>this.visibleChargers().length>0);isCompactCardMode=L(()=>this.renderMode()==="compact");colorRole=L(()=>this.runtime.options()?.color??"contrast");ignoreZones=L(()=>this.runtime.options()?.ignoreZones??!1);displayLabel=L(()=>{let a=this.visibleChargers();return a.length!==1?"Chargers":this.resolveTitleText(a[0])});labelColor=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a).dim:"var(--kip-contrast-dim-color)"});widgetColors=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a):null});displayModels=L(()=>{let a=this.visibleChargers(),e=new Map;a.forEach(o=>e.set(o.id,(e.get(o.id)??0)+1));let t=new Set([...e.entries()].filter(([,o])=>o>1).map(([o])=>o)),i={};for(let o of a){let r=o.deviceKey??o.id,s=!!o.source&&t.has(o.id),[l,m,h,v]=this.buildMetricRows(o);i[r]={id:o.id,source:o.source??null,deviceKey:o.deviceKey,titleText:this.resolveTitleText(o,s),modeText:this.isCompactCardMode()?"":this.resolveModeText(o),voltageText:l,currentText:m,powerText:h,temperatureText:v}}return i});constructor(){W(()=>{let t=this.runtime.options();t&&z(()=>this.applyConfig(t))}),W(()=>{let t=this.displayModels(),i=this.visibleChargers(),o=this.widgetColors();!this.svg||!o||this.requestRender({chargers:i,displayModels:t,widgetColors:o})});let a=[this.data.subscribePathTreeWithInitial(n.ROOT_PATTERN)],e=!1;for(let t of a)if(t.initial.length){e=!0;for(let i of t.initial)this.enqueuePathUpdate(i,!0)}e&&(this.flushPendingPathUpdates(),this.initialPathPaintDone=!0);for(let t of a)t.live$.pipe(De(this.destroyRef)).subscribe(i=>{this.enqueuePathUpdate(i)})}ngAfterViewInit(){this.initializeSvg(),this.requestRender()}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null}initializeSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${n.CARD_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Charger View"),this.layer=this.svg.append("g").attr("class","charger-layer")}applyConfig(a){let e=this.normalizeTrackedDevices(a.charger?.trackedDevices);this.trackedDevices.set(e),this.reprojectSnapshotsToDeviceKeys(e)}normalizeTrackedDevices(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(!t||typeof t!="object")return;let i=t,o=this.normalizeOptionalString(i.id),r=this.normalizeOptionalString(i.source);if(!o||!r)return;let s=this.normalizeOptionalString(i.key)??`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}buildIdToDeviceKeysMap(){let a=new Map;return this.trackedDevices().forEach(e=>{let t=a.get(e.id)??[];t.push(e.key),a.set(e.id,t)}),a}reprojectSnapshotsToDeviceKeys(a){if(!a.length)return;let e=new Map,t=new Map;a.forEach(i=>{let o=e.get(i.id)??[];o.push(i.key),e.set(i.id,o),t.set(i.key,i)}),this.chargersByKey.update(i=>{let o=i,r=!1;return e.forEach((s,l)=>{let m=i[l];if(m){for(let h of s){if(i[h])continue;let v=t.get(h);r||(o=Z({},i),r=!0),o[h]=ge(Z({},m),{source:v?.source??null,deviceKey:h})}o[l]&&(o[l].deviceKey===void 0||o[l].deviceKey===l)&&(r||(o=Z({},i),r=!0),delete o[l])}}),r?o:i})}normalizeOptionalString(a){if(typeof a!="string")return null;let e=a.trim();return e.length>0?e:null}enqueuePathUpdate(a,e=!1){let t=this.parsePath(a.path);if(!t)return;let i=a.update?.data?.value??null,o=a.update?.state??null,r=this.extractUpdateSource(a),s=`${t.id}::${r??"*"}::${t.key}`;if(this.pendingPathUpdates.set(s,{id:t.id,key:t.key,source:r,value:i,state:o}),!e){if(!this.initialPathPaintDone){this.initialPathPaintDone=!0,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates()},n.PATH_BATCH_WINDOW_MS))}}parsePath(a){let e=a.match(n.PATH_REGEX);return e?{id:e[1],key:e[2]}:null}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let a=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(a.map(o=>o.id)).forEach(o=>this.trackDiscoveredCharger(o));let t=this.buildIdToDeviceKeysMap(),i=new Map;this.trackedDevices().forEach(o=>i.set(o.key,o)),this.chargersByKey.update(o=>{let r=o,s=!1;for(let l of a){let m=t.get(l.id),h=!!m?.length,v=[];if(h)if(l.source){let y=`${l.id}||${l.source}`;v=m?.includes(y)?[y]:[]}else v=m??[];else v=[l.source?`${l.id}||${l.source}`:l.id];for(let y of v){let C=h?i.get(y):null,S=r[y]??{id:l.id,source:C?.source??l.source??null,deviceKey:h||l.source?y:void 0},_=Z({},S);if(!this.applyValue(_,l.key,l.value,l.state))continue;let E=_.rawPower!=null?_.rawPower:_.voltage!=null&&_.current!=null?_.voltage*_.current:null;E!=null?_.power=Number.isFinite(E)?E:null:_.power=null,_.rawPower==null&&(_.powerState=this.resolveMostSevereState(_.voltageState??null,_.currentState??null)),s||(r=Z({},r),s=!0),r[y]=_}}return s?r:o})}extractUpdateSource(a){let e=this.normalizeOptionalString(a.source);return e||(this.normalizeOptionalString(a.update?.data?.source)??null)}trackDiscoveredCharger(a){let e=this.discoveredChargerIds();e.includes(a)||this.discoveredChargerIds.set([...e,a].sort((t,i)=>t.localeCompare(i)))}applyValue(a,e,t,i){switch(e){case"name":return this.setValue(a,"name",this.toStringValue(t));case"location":return this.setValue(a,"location",this.toStringValue(t));case"associatedBus":return this.setValue(a,"associatedBus",this.toStringValue(t));case"state":return this.setMetricValue(a,"state","stateState",this.toStringValue(t),i);case"offReason":return this.setMetricValue(a,"offReason","offReasonState",this.toStringValue(t),i);case"error":return this.setMetricValue(a,"error","errorState",this.toStringValue(t),i);case"mode":return this.setMetricValue(a,"mode","modeState",this.toStringValue(t),i);case"modeState":return this.setMetricValue(a,"mode","modeState",this.toStringValue(t),i);case"modeNumber":return this.setMetricValue(a,"modeNumber","modeNumberState",this.toNumber(t,""),i);case"chargingMode":return this.setMetricValue(a,"chargingMode","chargingModeState",this.toStringValue(t),i);case"chargingModeNumber":return this.setMetricValue(a,"chargingModeNumber","chargingModeNumberState",this.toNumber(t,""),i);case"output.voltage":{let o=this.toNumber(t,"V"),r=this.setMetricValue(a,"outputVoltage","outputVoltageState",o,i),s=this.setMetricValue(a,"voltage","voltageState",o,i);return r||s}case"input.voltage":return this.setMetricValue(a,"inputVoltage","inputVoltageState",this.toNumber(t,"V"),i);case"voltage":return this.setMetricValue(a,"voltage","voltageState",this.toNumber(t,"V"),i);case"current":return this.setMetricValue(a,"current","currentState",this.toNumber(t,"A"),i);case"power":return this.setMetricValue(a,"rawPower","powerState",this.toNumber(t,"W"),i);case"temperature":return this.setMetricValue(a,"temperature","temperatureState",this.toNumber(t,this.units.getDefaults().Temperature),i);case"leds.absorption":return this.setMetricValue(a,"ledsAbsorption","ledsAbsorptionState",this.toBoolean(t),i);case"leds.bulk":return this.setMetricValue(a,"ledsBulk","ledsBulkState",this.toBoolean(t),i);case"leds.float":return this.setMetricValue(a,"ledsFloat","ledsFloatState",this.toBoolean(t),i);case"leds.inverter":return this.setMetricValue(a,"ledsInverter","ledsInverterState",this.toBoolean(t),i);case"leds.lowBattery":return this.setMetricValue(a,"ledsLowBattery","ledsLowBatteryState",this.toBoolean(t),i);case"leds.mains":return this.setMetricValue(a,"ledsMains","ledsMainsState",this.toBoolean(t),i);case"leds.overload":return this.setMetricValue(a,"ledsOverload","ledsOverloadState",this.toBoolean(t),i);case"leds.temperature":return this.setMetricValue(a,"ledsTemperature","ledsTemperatureState",this.toBoolean(t),i);default:return!1}}setValue(a,e,t){return Object.is(a[e],t)?!1:(a[e]=t,!0)}setMetricValue(a,e,t,i,o){let r=!Object.is(a[e],i),s=!Object.is(a[t],o);return!r&&!s?!1:(a[e]=i,a[t]=o,!0)}requestRender(a){let e=this.widgetColors();!this.svg||!e||(this.pendingRenderSnapshot=a??{chargers:this.visibleChargers(),displayModels:this.displayModels(),widgetColors:e},this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let t=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,t&&this.render(t)})))}render(a){if(!this.layer||!this.svg)return;let e=this.isCompactCardMode(),t=e?ya:ci,i=e?n.COMPACT_CARD_HEIGHT:n.CARD_HEIGHT,o=n.VIEWBOX_WIDTH-n.CHARGER_DISPLAY_HORIZONTAL_MARGIN,r=o/n.CHARGER_DISPLAY_BASE_WIDTH,s=o,l=(n.VIEWBOX_WIDTH-s)/2,m=e?8:t.titleY,h=e?33:60,v=a.chargers.map((B,re)=>({key:B.deviceKey??B.id,id:B.id,charger:B,y:re*(i+n.CARD_GAP)})),y=v.length?v[v.length-1].y+i:i;this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${y}`);let C=this.layer.selectAll("g.charger-card").data(v,B=>B.key),S=C.enter().append("g").attr("class","charger-card"),_=S.append("g").attr("class","charger-display-group");_.append("path").attr("class","charger-shape-bulk").attr("d","m 39.280608,10.70371 1.604609,-3.7808024 c 0.06926,-0.1631805 0.314475,-0.553581 0.314475,-0.4368876 v 27.475177 c 0,0.116694 -0.142713,0.210638 -0.319983,0.210638 H 9.2681756 c -0.1772706,0 -0.3711555,-0.105758 -0.319983,-0.210638 l 1.2797184,-2.622833 c 1.150699,-2.358403 3.86281,-5.455024 6.286778,-6.406312 3.251217,-1.275942 7.834296,-2.821704 11.746419,-4.103315 4.312764,-1.412861 9.246151,-5.946636 11.0195,-10.125027 z").attr("transform","matrix(1.1068428,0,0,1.1601894,-8.804611,-6.1382561)").attr("fill","var(--mat-sys-background)").attr("stroke",a.widgetColors.color).attr("stroke-width",2).attr("stroke-linejoin","miter").attr("stroke-miterlimit",0).attr("paint-order","markers stroke fill"),_.append("rect").attr("class","charger-shape-absorption").attr("width",19.67485).attr("height",32.383526).attr("x",40.545158).attr("y",1.1331999).attr("rx",.19520389).attr("ry",.24451913).attr("fill","var(--mat-sys-background)").attr("stroke",a.widgetColors.color).attr("stroke-width",2).attr("stroke-linecap","butt").attr("stroke-linejoin","miter").attr("stroke-miterlimit",0).attr("paint-order","markers stroke fill"),_.append("path").attr("class","charger-shape-float").attr("d","m 66.03898,6.4101715 4.16646,3.2472635 c 1.876083,1.462185 5.139444,3.529899 7.448846,4.069504 5.055358,1.181215 11.386089,1.251612 11.38595,1.349059 l -0.02667,18.73082 c 0,0.127151 -0.103075,0.230227 -0.230226,0.230227 H 66.03898 c -0.127151,0 -0.230226,-0.103076 -0.230226,-0.230227 V 6.6403978 c 0,-0.1271504 0.103076,-0.2302261 0.230226,-0.2302263 z").attr("transform","matrix(1.1068428,0,0,1.1601894,-8.7228087,-6.1382561)").attr("fill","var(--mat-sys-background)").attr("stroke",a.widgetColors.color).attr("stroke-width",2).attr("stroke-linecap","butt").attr("stroke-linejoin","miter").attr("stroke-miterlimit",0).attr("paint-order","markers stroke fill"),_.append("path").attr("class","charger-shape-storage").attr("d","m 93.39395,15.253553 c 2.347866,2.587905 8.59059,4.802212 13.94479,4.852641 11.92289,0.112298 30.60094,0.205911 30.60096,0.259031 l 0.006,13.361558 c 3e-5,0.07786 -0.19912,0.140548 -0.44645,0.140548 h -44.1053 c -0.247332,0 -0.446448,-0.06269 -0.446448,-0.140548 V 15.394101 c 0,-0.07786 0.280259,-0.323728 0.446448,-0.140548 z").attr("transform","matrix(1.1077284,0,0,1.1178939,-8.9068494,-4.6850995)").attr("fill","var(--mat-sys-background)").attr("stroke",a.widgetColors.color).attr("stroke-width",2).attr("stroke-linejoin","miter").attr("stroke-miterlimit",0).attr("paint-order","markers stroke fill"),S.append("text").attr("class","charger-title"),S.append("text").attr("class","charger-mode");let F=S.append("text").attr("class","charger-voltage");F.append("tspan").attr("class","voltage-metric-value"),F.append("tspan").attr("class","voltage-metric-unit");let E=S.append("text").attr("class","charger-current");E.append("tspan").attr("class","current-metric-value"),E.append("tspan").attr("class","current-metric-unit");let N=S.append("text").attr("class","charger-power");N.append("tspan").attr("class","power-metric-value"),N.append("tspan").attr("class","power-metric-unit");let U=S.append("text").attr("class","charger-temperature");U.append("tspan").attr("class","temperature-metric-value"),U.append("tspan").attr("class","temperature-metric-unit");let j=S.merge(C);j.attr("transform",B=>`translate(0, ${B.y})`),j.select("g.charger-display-group").attr("transform",`translate(${l}, ${h}) scale(${r})`).each((B,re,pe)=>{let te=this.resolveShapeMode(B.charger),se=this.isShapeMode(te,"power supply"),de=a.widgetColors.dim,ce="var(--mat-sys-background)",ue=this.isShapeMode(te,"sustain")||se?"none":this.isShapeMode(te,"equalization")?"var(--kip-zone-alert-color)":this.isShapeMode(te,"overload")?"var(--kip-zone-alarm-color)":a.widgetColors.color,me=Wt(pe[re]);me.select("path.charger-shape-bulk").attr("fill",this.isShapeMode(te,"bulk")||this.isShapeMode(te,"boost")||se?de:ce).attr("stroke",ue),me.select("rect.charger-shape-absorption").attr("fill",this.isShapeMode(te,"absorption")||se?de:ce).attr("stroke",ue),me.select("path.charger-shape-float").attr("fill",this.isShapeMode(te,"float")||se?de:ce).attr("stroke",ue),me.select("path.charger-shape-storage").attr("fill",this.isShapeMode(te,"storage")||se?de:ce).attr("stroke",ue)}),a.chargers.length>1?j.select("text.charger-title").attr("x",t.titleX).attr("y",m).attr("font-size",t.titleFontSize).attr("fill","var(--kip-contrast-dim-color)").text(B=>a.displayModels[B.key]?.titleText??this.resolveTitleText(B.charger)):j.select("text.charger-title").text(""),j.select("text.charger-voltage").attr("x",197).attr("y",25).attr("text-anchor","end").attr("font-size",t.primaryFontSize).attr("font-weight",t.primaryFontWeight).attr("fill","var(--kip-contrast-color)"),j.select("tspan.voltage-metric-value").text(B=>a.displayModels[B.key]?.voltageText??""),j.select("tspan.voltage-metric-unit").attr("dx",1).attr("font-size",22).attr("font-weight",500).attr("fill","var(--kip-contrast-color)").text("V"),j.select("text.charger-current").attr("x",197).attr("y",48).attr("text-anchor","end").attr("font-size",t.lineOneFontSize).attr("fill","var(--kip-contrast-color)"),j.select("tspan.current-metric-value").text(B=>a.displayModels[B.key]?.currentText??""),j.select("tspan.current-metric-unit").attr("dx",1).attr("font-size",12).attr("fill","var(--kip-contrast-color)").text("A"),j.select("text.charger-power").attr("x",5).attr("y",22).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",10),j.select("tspan.power-metric-value").text(B=>a.displayModels[B.key]?.powerText??""),j.select("tspan.power-metric-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-dim-color)").text("W"),j.select("text.charger-temperature").attr("x",5).attr("y",34).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",10),j.select("tspan.temperature-metric-value").text(B=>a.displayModels[B.key]?.temperatureText??""),j.select("tspan.temperature-metric-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-dim-color)").text(`${this.units.getDefaults().Temperature==="celsius"?"\xB0C":"\xB0F"}`),j.select("text.charger-mode").attr("x",5).attr("y",46).attr("font-size",10).attr("fill","var(--kip-contrast-dim-color)").text(B=>a.displayModels[B.key]?.modeText??""),C.exit().remove()}resolveTitleText(a,e=!1){let t=a.name||`Charger ${a.id}`;return!e||!a.source?t:`${t} [${a.source}]`}resolveModeText(a){if(a.chargingMode)return`Mode: ${a.chargingMode.charAt(0).toUpperCase()+a.chargingMode.slice(1)}`;if(a.mode)return`Mode: ${a.mode}`;let t=[{active:a.ledsAbsorption,label:"Absorption"},{active:a.ledsBulk,label:"Bulk"},{active:a.ledsFloat,label:"Float"},{active:a.ledsInverter,label:"Inverter"},{active:a.ledsLowBattery,label:"Low Battery"},{active:a.ledsMains,label:"Mains"},{active:a.ledsOverload,label:"Overload"},{active:a.ledsTemperature,label:"Temperature"}].filter(i=>i.active===!0).map(i=>i.label);return t.length?`Mode: ${t.join(" / ")}`:"Mode --"}resolveShapeMode(a){return(a.chargingMode??a.mode??"").trim().toLowerCase()}isShapeMode(a,e){return!a||!e?!1:a===e||a.includes(e)}buildMetricRows(a){return this.renderMode()==="full"||this.renderMode()===null?[`${this.formatValue(a.voltage,1)}`,`${this.formatValue(a.current,1)}`,`Power: ${this.formatValue(a.power,0)}`,`Temp: ${this.formatTemperature(a.temperature)}`]:[`${this.formatValue(a.voltage,1)}`,`${this.formatValue(a.current,1)}`,`P: ${this.formatValue(a.power,0)}`,`T: ${this.formatTemperature(a.temperature)}`]}formatValue(a,e){return a==null||Number.isNaN(a)?"-":`${a.toFixed(e)}`}formatTemperature(a){return a==null||Number.isNaN(a)?"-":`${a.toFixed(0)}`}toStringValue(a){return typeof a=="string"?a:null}toBoolean(a){if(typeof a=="boolean")return a;if(typeof a=="number"){if(a===1)return!0;if(a===0)return!1}if(typeof a=="string"){let e=a.trim().toLowerCase();if(e==="true"||e==="1"||e==="on")return!0;if(e==="false"||e==="0"||e==="off")return!1}return null}resolveMostSevereState(...a){return a.some(e=>e===J.Alert)?J.Alert:a.some(e=>e===J.Alarm)?J.Alarm:a.some(e=>e===J.Warn)?J.Warn:a.some(e=>e===J.Normal)?J.Normal:null}toNumber(a,e){if(a==null||typeof a=="boolean")return null;let t=typeof a=="number"?a:Number(a);if(!Number.isFinite(t))return null;let i=this.units.convertToUnit(e,t);return Number.isFinite(i)?i:t}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["widget-charger"]],viewQuery:function(e,t){e&1&&_e(t.svgRef,K_,5),e&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:3,consts:[["chargerSvg",""],[3,"text","color"],["aria-hidden","false",1,"charger-svg"],[1,"charger-empty"],[1,"charger-empty-title"],[1,"charger-empty-sub"]],template:function(e,t){e&1&&(O(0,"widget-title",1),oe(),O(1,"svg",2,0),I(3,X_,5,0,"div",3)),e&2&&(R("text",t.displayLabel())("color",t.labelColor()),f(3),P(t.hasChargers()?-1:3))},dependencies:[Vt],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.charger-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 10px 10px}.charger-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.charger-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.charger-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}"],changeDetection:0})};var Q_=["inverterSvg"];function J_(n,a){n&1&&(d(0,"div",3)(1,"div",4),c(2,"No inverters detected"),u(),d(3,"div",5),c(4,"Check Signal K inverter paths or select inverters in widget settings."),u()())}function eM(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var El=class n{static INVERTER_DESCRIPTOR=zi("widget-inverter");static SELF_ROOT_PATH=(()=>{let a=n.INVERTER_DESCRIPTOR?.selfRootPath;if(!a)throw new Error("[WidgetInverterComponent] Descriptor missing or selfRootPath not set; check widget registration.");return a})();static ROOT_PATTERN=`${n.SELF_ROOT_PATH}.*`;static PATH_REGEX=new RegExp(`^${eM(n.SELF_ROOT_PATH)}\\.([^.]+)\\.(.+)$`);static VIEWBOX_WIDTH=200;static CARD_HEIGHT=100;static COMPACT_CARD_HEIGHT=100;static CARD_GAP=8;static PATH_BATCH_WINDOW_MS=500;static DEFAULT_CONFIG={color:"contrast",ignoreZones:!1,inverter:{trackedDevices:[],optionsById:{}}};id=x.required();type=x.required();theme=x.required();renderMode=x(null);runtime=A(xe);data=A(st);units=A(He);destroyRef=A(Ie);svgRef=he.required("inverterSvg");svg;layer;pendingPathUpdates=new Map;pathBatchTimerId=null;initialPathPaintDone=!1;renderFrameId=null;pendingRenderSnapshot=null;discoveredInverterIds=w([]);trackedDevices=w([]);optionsById=w({});cardMode=w({displayMode:"full",metrics:["dcVoltage","dcCurrent","acVoltage","acFrequency"]});invertersByKey=w({});visibleInverterKeys=L(()=>{let a=this.trackedDevices();if(a.length)return a.map(i=>i.key);let e=this.invertersByKey(),t=new Set(this.discoveredInverterIds());return Object.keys(e).filter(i=>{let o=e[i];return!!o&&t.has(o.id)}).sort((i,o)=>i.localeCompare(o))});visibleInverters=L(()=>{let a=this.visibleInverterKeys(),e=this.invertersByKey();return a.map(t=>e[t]).filter(t=>!!t)});hasInverters=L(()=>this.visibleInverters().length>0);activeDisplayMode=L(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=L(()=>this.activeDisplayMode()==="compact");colorRole=L(()=>this.runtime.options()?.color??"contrast");ignoreZones=L(()=>this.runtime.options()?.ignoreZones??!1);displayLabel=L(()=>{let a=this.visibleInverters();return a.length!==1?"Inverters":this.resolveTitleText(a[0])});labelColor=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a).dim:"var(--kip-contrast-dim-color)"});widgetColors=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a):null});displayModels=L(()=>{let a=this.visibleInverters(),e=this.theme(),t=this.widgetColors(),i=this.ignoreZones(),o=new Map;a.forEach(l=>o.set(l.id,(o.get(l.id)??0)+1));let r=new Set([...o.entries()].filter(([,l])=>l>1).map(([l])=>l)),s={};for(let l of a){let m=l.deviceKey??l.id,h=!!l.source&&r.has(l.id),v=this.resolveMostSevereState(l.dcVoltageState??null,l.dcCurrentState??null,l.acVoltageState??null,l.acCurrentState??null,l.acFrequencyState??null,l.temperatureState??null,l.inverterModeState??null),y=this.resolveMostSevereState(l.dcVoltageState??null,l.dcCurrentState??null),C=this.resolveMostSevereState(l.acVoltageState??null,l.acCurrentState??null,l.acFrequencyState??null),[S,_]=this.buildMetricRows(l);s[m]={id:l.id,source:l.source??null,deviceKey:l.deviceKey,titleText:this.resolveTitleText(l),modeText:this.isCompactCardMode()?"":l.inverterMode?`Mode ${l.inverterMode}`:"Mode -",busText:this.isCompactCardMode()?"":h?l.source??"-":l.associatedBus||l.location||"-",metricsLineOne:S,metricsLineTwo:_,stateBarColor:ht(v,t?.dim??"var(--kip-contrast-color)",e,i),titleTextColor:ht(v,"var(--kip-contrast-color)",e,i),metaTextColor:ht(l.inverterModeState??null,"var(--kip-contrast-dim-color)",e,i),primaryMetricsTextColor:ht(y,"var(--kip-contrast-color)",e,i),secondaryMetricsTextColor:ht(C,"var(--kip-contrast-color)",e,i)}}return s});constructor(){W(()=>{let t=this.runtime.options();t&&z(()=>this.applyConfig(t))}),W(()=>{let t=this.displayModels(),i=this.visibleInverters(),o=this.widgetColors();!this.svg||!o||this.requestRender({inverters:i,displayModels:t,widgetColors:o})});let a=[this.data.subscribePathTreeWithInitial(n.ROOT_PATTERN)],e=!1;for(let t of a)if(t.initial.length){e=!0;for(let i of t.initial)this.enqueuePathUpdate(i,!0)}e&&(this.flushPendingPathUpdates(),this.initialPathPaintDone=!0);for(let t of a)t.live$.pipe(De(this.destroyRef)).subscribe(i=>this.enqueuePathUpdate(i))}ngAfterViewInit(){this.initializeSvg(),this.requestRender()}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null}initializeSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${n.CARD_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Inverter View"),this.layer=this.svg.append("g").attr("class","inverter-layer")}applyConfig(a){let e=this.resolveInverterConfig(a);this.trackedDevices.set(e.trackedDevices??[]),this.reprojectSnapshotsToDeviceKeys(e.trackedDevices??[]),this.optionsById.set(e.optionsById),this.cardMode.set(this.normalizeCardMode(e.cardMode))}reprojectSnapshotsToDeviceKeys(a){if(!a.length)return;let e=new Map;a.forEach(t=>{let i=e.get(t.id)??[];i.push(t.key),e.set(t.id,i)}),this.invertersByKey.update(t=>{let i=t,o=!1;return e.forEach((r,s)=>{let l=t[s];if(l){for(let m of r){if(t[m])continue;let h=a.find(v=>v.key===m);o||(i=Z({},t),o=!0),i[m]=ge(Z({},l),{source:h?.source??null,deviceKey:m})}o&&i[s]?.deviceKey===void 0&&delete i[s]}}),o?i:t})}resolveInverterConfig(a){let e=a.inverter;return{trackedDevices:this.normalizeTrackedDevices(e?.trackedDevices),optionsById:this.normalizeOptionsById(e?.optionsById),cardMode:this.normalizeCardMode(e?.cardMode)}}normalizeTrackedDevices(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(!t||typeof t!="object")return;let i=t,o=this.normalizeOptionalString(i.id),r=this.normalizeOptionalString(i.source);if(!o||!r)return;let s=this.normalizeOptionalString(i.key)??`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}buildIdToDeviceKeysMap(){let a=new Map;return this.trackedDevices().forEach(e=>{let t=a.get(e.id)??[];t.push(e.key),a.set(e.id,t)}),a}normalizeCardMode(a){let e=a&&typeof a=="object"?a:null,t=this.normalizeStringList(e?.metrics);return{displayMode:e?.displayMode==="compact"?"compact":"full",metrics:t.length?t:["dcVoltage","dcCurrent","acVoltage","acFrequency"]}}normalizeStringList(a){if(!Array.isArray(a))return[];let e=new Set;return a.forEach(t=>{if(typeof t!="string")return;let i=t.trim();i.length>0&&e.add(i)}),[...e].sort((t,i)=>t.localeCompare(i))}normalizeOptionsById(a){if(!a||typeof a!="object")return{};let e={};return Object.entries(a).forEach(([t])=>{let i=this.normalizeOptionalString(t);i&&(e[i]={})}),e}normalizeOptionalString(a){if(typeof a!="string")return null;let e=a.trim();return e.length>0?e:null}enqueuePathUpdate(a,e=!1){let t=this.parsePath(a.path);if(!t)return;let i=a.update?.data?.value??null,o=a.update?.state??null;if(this.pendingPathUpdates.set(`${t.id}::${t.key}`,{id:t.id,key:t.key,value:i,state:o}),!e){if(!this.initialPathPaintDone){this.initialPathPaintDone=!0,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates()},n.PATH_BATCH_WINDOW_MS))}}parsePath(a){let e=a.match(n.PATH_REGEX);return e?{id:e[1],key:e[2]}:null}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let a=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(a.map(i=>i.id)).forEach(i=>this.trackDiscoveredInverter(i));let t=this.buildIdToDeviceKeysMap();this.invertersByKey.update(i=>{let o=i,r=!1;for(let s of a){let l=t.get(s.id),m=l?.length?l:[s.id];for(let h of m){let v=!!l?.length,y=v?this.trackedDevices().find(F=>F.key===h):null,C=o[h]??{id:s.id,source:y?.source??null,deviceKey:v?h:void 0},S=Z({},C);if(this.applyValue(S,s.key,s.value,s.state)){if(S.dcVoltage!=null&&S.dcCurrent!=null){let F=S.dcVoltage*S.dcCurrent;S.dcPower=Number.isFinite(F)?F:null,S.dcPowerState=this.resolveMostSevereState(S.dcVoltageState??null,S.dcCurrentState??null)}else S.dcPower=null,S.dcPowerState=null;r||(o=Z({},o),r=!0),o[h]=S}}}return r?o:i})}trackDiscoveredInverter(a){let e=this.discoveredInverterIds();e.includes(a)||this.discoveredInverterIds.set([...e,a].sort((t,i)=>t.localeCompare(i)))}applyValue(a,e,t,i){switch(e){case"name":return this.setValue(a,"name",this.toStringValue(t));case"location":return this.setValue(a,"location",this.toStringValue(t));case"associatedBus":return this.setValue(a,"associatedBus",this.toStringValue(t));case"dc.voltage":return this.setMetricValue(a,"dcVoltage","dcVoltageState",this.toNumber(t,"V"),i);case"dc.current":return this.setMetricValue(a,"dcCurrent","dcCurrentState",this.toNumber(t,"A"),i);case"acin.voltage":return this.setMetricValue(a,"acInVoltage","acInVoltageState",this.toNumber(t,"V"),i);case"acin.current":return this.setMetricValue(a,"acInCurrent","acInCurrentState",this.toNumber(t,"A"),i);case"acin.frequency":return this.setMetricValue(a,"acInFrequency","acInFrequencyState",this.toNumber(t,"Hz"),i);case"acin.power":return this.setMetricValue(a,"acInPower","acInPowerState",this.toNumber(t,"W"),i);case"acin.1.currentLimit":return this.setMetricValue(a,"acIn1CurrentLimit","acIn1CurrentLimitState",this.toNumber(t,"A"),i);case"acin.currentLimit":return this.setMetricValue(a,"acInCurrentLimit","acInCurrentLimitState",this.toNumber(t,"A"),i);case"acState.acIn1Available":return this.setMetricValue(a,"acIn1Available","acIn1AvailableState",this.toBoolean(t),i);case"acState.ignoreAcIn1.state":return this.setMetricValue(a,"ignoreAcIn1","ignoreAcIn1State",this.toBoolean(t),i);case"ac.voltage":return this.setMetricValue(a,"acVoltage","acVoltageState",this.toNumber(t,"V"),i);case"ac.current":return this.setMetricValue(a,"acCurrent","acCurrentState",this.toNumber(t,"A"),i);case"ac.frequency":return this.setMetricValue(a,"acFrequency","acFrequencyState",this.toNumber(t,"Hz"),i);case"acout.voltage":return this.setMetricValue(a,"acOutVoltage","acOutVoltageState",this.toNumber(t,"V"),i);case"acout.current":return this.setMetricValue(a,"acOutCurrent","acOutCurrentState",this.toNumber(t,"A"),i);case"acout.frequency":return this.setMetricValue(a,"acOutFrequency","acOutFrequencyState",this.toNumber(t,"Hz"),i);case"acout.power":return this.setMetricValue(a,"acOutPower","acOutPowerState",this.toNumber(t,"W"),i);case"inverterMode":return this.setMetricValue(a,"inverterMode","inverterModeState",this.toStringValue(t),i);case"inverterModeNumber":return this.setMetricValue(a,"inverterModeNumber","inverterModeNumberState",this.toNumber(t,""),i);case"preferRenewableEnergy":return this.setMetricValue(a,"preferRenewableEnergy","preferRenewableEnergyState",this.toBoolean(t),i);case"preferRenewableEnergyActive":return this.setMetricValue(a,"preferRenewableEnergyActive","preferRenewableEnergyActiveState",this.toBoolean(t),i);case"temperature":return this.setMetricValue(a,"temperature","temperatureState",this.toNumber(t,this.units.getDefaults().Temperature),i);default:return!1}}setValue(a,e,t){return Object.is(a[e],t)?!1:(a[e]=t,!0)}setMetricValue(a,e,t,i,o){let r=!Object.is(a[e],i),s=!Object.is(a[t],o);return!r&&!s?!1:(a[e]=i,a[t]=o,!0)}requestRender(a){let e=this.widgetColors();!this.svg||!e||(this.pendingRenderSnapshot=a??{inverters:this.visibleInverters(),displayModels:this.displayModels(),widgetColors:e},this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let t=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,t&&this.render(t)})))}render(a){if(!this.layer||!this.svg)return;let e=this.isCompactCardMode(),t=e?ya:ci,i=e?n.COMPACT_CARD_HEIGHT:n.CARD_HEIGHT,o=a.inverters.map((h,v)=>({key:h.deviceKey??h.id,inverter:h,y:v*(i+n.CARD_GAP)})),r=o.length?o[o.length-1].y+i:i;this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${r}`);let s=this.layer.selectAll("g.inverter-card").data(o,h=>h.key),l=s.enter().append("g").attr("class","inverter-card");l.append("rect").attr("class","inverter-card-bg"),l.append("rect").attr("class","inverter-state-bar"),l.append("text").attr("class","inverter-title"),l.append("text").attr("class","inverter-id"),l.append("text").attr("class","inverter-mode"),l.append("text").attr("class","inverter-bus"),l.append("text").attr("class","inverter-metrics-1"),l.append("text").attr("class","inverter-metrics-2");let m=l.merge(s);m.attr("transform",h=>`translate(0, ${h.y})`),m.select("rect.inverter-card-bg").attr("x",.5).attr("y",.5).attr("rx",t.cardCornerRadius).attr("ry",t.cardCornerRadius).attr("width",n.VIEWBOX_WIDTH-1).attr("height",i-1).attr("stroke","var(--mat-sys-outline-variant)").attr("stroke-width",.5).attr("fill","none"),m.select("rect.inverter-state-bar").attr("x",1.5).attr("y",1.5).attr("rx",t.stateBarCornerRadius).attr("ry",t.stateBarCornerRadius).attr("width",3).attr("height",i-3).attr("fill",h=>a.displayModels[h.key]?.stateBarColor??a.widgetColors.dim),a.inverters.length>1?m.select("text.inverter-title").attr("x",t.titleX).attr("y",t.titleY).attr("font-size",t.titleFontSize).attr("fill",h=>a.displayModels[h.key]?.titleTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.titleText??this.resolveTitleText(h.inverter)):m.select("text.inverter-title").text(""),m.select("text.inverter-id").attr("x",t.idX).attr("y",t.idY).attr("text-anchor","end").attr("font-size",t.idFontSize).attr("fill","var(--kip-contrast-dim-color)").text(h=>h.inverter.id),m.select("text.inverter-mode").attr("x",t.metaLeftX).attr("y",t.metaY).attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",h=>a.displayModels[h.key]?.metaTextColor??"var(--kip-contrast-dim-color)").text(h=>a.displayModels[h.key]?.modeText??""),m.select("text.inverter-bus").attr("x",t.metaRightX).attr("y",t.metaY).attr("text-anchor","end").attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",h=>a.displayModels[h.key]?.metaTextColor??"var(--kip-contrast-dim-color)").text(h=>a.displayModels[h.key]?.busText??""),m.select("text.inverter-metrics-1").attr("x",t.lineOneX).attr("y",t.lineOneY).attr("font-size",t.lineOneFontSize).attr("fill",h=>a.displayModels[h.key]?.primaryMetricsTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.metricsLineOne??""),m.select("text.inverter-metrics-2").attr("x",t.lineTwoX).attr("y",t.lineTwoY).attr("font-size",t.lineTwoFontSize).attr("opacity",.85).attr("fill",h=>a.displayModels[h.key]?.secondaryMetricsTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.metricsLineTwo??""),s.exit().remove()}displayName(a){return a.name?.trim()||a.id}resolveTitleText(a){return a.name||`Inverter ${a.id}`}buildMetricRows(a){let e=this.cardMode();if(this.activeDisplayMode()==="full"){let i=a.acInVoltage!=null||a.acInCurrent!=null,o=this.formatValue(a.acInVoltage,"V"),r=this.formatValue(a.acInCurrent,"A"),s=this.formatValue(a.acOutVoltage??a.acVoltage,"V"),l=this.formatValue(a.acOutFrequency??a.acFrequency,"Hz");return[`DC ${this.formatValue(a.dcVoltage,"V")} ${this.formatValue(a.dcCurrent,"A")}`,i?`ACin ${o} ${r}`:`AC ${s} ${l}`]}let t=e.metrics.map(i=>this.toMetricLabel(i,a)).filter(i=>!!i);return t.length?[t.slice(0,2).join(" ")||" ",t.slice(2,4).join(" ")||" "]:["DC - -","AC - -"]}toMetricLabel(a,e){switch(a){case"dcVoltage":return`DC V ${this.formatValue(e.dcVoltage,"V")}`;case"dcCurrent":return`DC A ${this.formatValue(e.dcCurrent,"A")}`;case"dcPower":return`DC P ${this.formatValue(e.dcPower,"W")}`;case"acVoltage":return`AC V ${this.formatValue(e.acVoltage,"V")}`;case"acCurrent":return`AC A ${this.formatValue(e.acCurrent,"A")}`;case"acFrequency":return`Hz ${this.formatValue(e.acFrequency,"Hz")}`;case"acInVoltage":return`ACin V ${this.formatValue(e.acInVoltage,"V")}`;case"acInCurrent":return`ACin A ${this.formatValue(e.acInCurrent,"A")}`;case"acInFrequency":return`ACin Hz ${this.formatValue(e.acInFrequency,"Hz")}`;case"acInPower":return`ACin P ${this.formatValue(e.acInPower,"W")}`;case"acOutVoltage":return`ACout V ${this.formatValue(e.acOutVoltage,"V")}`;case"acOutCurrent":return`ACout A ${this.formatValue(e.acOutCurrent,"A")}`;case"acOutFrequency":return`ACout Hz ${this.formatValue(e.acOutFrequency,"Hz")}`;case"acOutPower":return`ACout P ${this.formatValue(e.acOutPower,"W")}`;case"acIn1CurrentLimit":return`ACin1 Lim ${this.formatValue(e.acIn1CurrentLimit,"A")}`;case"acInCurrentLimit":return`ACin Lim ${this.formatValue(e.acInCurrentLimit,"A")}`;case"temperature":return`T ${this.formatTemperature(e.temperature)}`;case"inverterModeNumber":return`Mode# ${e.inverterModeNumber?.toString()??"-"}`;default:return null}}formatValue(a,e){return a==null||Number.isNaN(a)?"-":`${a.toFixed(1)} ${e}`}formatTemperature(a){return a==null||Number.isNaN(a)?"-":`${a.toFixed(1)} ${this.units.getDefaults().Temperature==="celsius"?"\xB0C":"\xB0F"}`}toStringValue(a){return typeof a=="string"?a:null}resolveMostSevereState(...a){return a.some(e=>e===J.Alert)?J.Alert:a.some(e=>e===J.Alarm)?J.Alarm:a.some(e=>e===J.Warn)?J.Warn:a.some(e=>e===J.Normal)?J.Normal:null}toNumber(a,e){if(a==null||typeof a=="boolean")return null;let t=typeof a=="number"?a:Number(a);if(!Number.isFinite(t))return null;let i=this.units.convertToUnit(e,t);return typeof i=="number"&&Number.isFinite(i)?i:null}toBoolean(a){if(typeof a=="boolean")return a;if(typeof a=="number"){if(a===1)return!0;if(a===0)return!1}if(typeof a=="string"){let e=a.trim().toLowerCase();if(e==="true"||e==="1"||e==="on")return!0;if(e==="false"||e==="0"||e==="off")return!1}return null}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["widget-inverter"]],viewQuery:function(e,t){e&1&&_e(t.svgRef,Q_,5),e&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:3,consts:[["inverterSvg",""],[3,"text","color"],["aria-hidden","false",1,"inverter-svg"],[1,"inverter-empty"],[1,"inverter-empty-title"],[1,"inverter-empty-sub"]],template:function(e,t){e&1&&(O(0,"widget-title",1),oe(),O(1,"svg",2,0),I(3,J_,5,0,"div",3)),e&2&&(R("text",t.displayLabel())("color",t.labelColor()),f(3),P(t.hasInverters()?-1:3))},dependencies:[Vt],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.inverter-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 10px 10px}.inverter-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.inverter-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.inverter-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}"],changeDetection:0})};var tM=["alternatorSvg"];function iM(n,a){n&1&&(d(0,"div",3)(1,"div",4),c(2,"No alternators detected"),u(),d(3,"div",5),c(4,"Check Signal K alternator paths or select alternators in widget settings."),u()())}function nM(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Il=class n{static ALTERNATOR_DESCRIPTOR=zi("widget-alternator");static SELF_ROOT_PATH=(()=>{let a=n.ALTERNATOR_DESCRIPTOR?.selfRootPath;if(!a)throw new Error("[WidgetAlternatorComponent] Descriptor missing or selfRootPath not set; check widget registration.");return a})();static ROOT_PATTERN=`${n.SELF_ROOT_PATH}.*`;static PATH_REGEX=new RegExp(`^${nM(n.SELF_ROOT_PATH)}\\.([^.]+)\\.(.+)$`);static VIEWBOX_WIDTH=200;static CARD_HEIGHT=100;static COMPACT_CARD_HEIGHT=100;static CARD_GAP=8;static PATH_BATCH_WINDOW_MS=500;static DEFAULT_CONFIG={color:"contrast",ignoreZones:!1,alternator:{trackedDevices:[],optionsById:{}}};id=x.required();type=x.required();theme=x.required();renderMode=x(null);runtime=A(xe);data=A(st);units=A(He);destroyRef=A(Ie);svgRef=he.required("alternatorSvg");svg;layer;pendingPathUpdates=new Map;pathBatchTimerId=null;initialPathPaintDone=!1;renderFrameId=null;pendingRenderSnapshot=null;discoveredAlternatorIds=w([]);trackedDevices=w([]);optionsById=w({});cardMode=w({displayMode:"full",metrics:["voltage","current","power","revolutions"]});alternatorsByKey=w({});visibleAlternatorKeys=L(()=>{let a=this.trackedDevices();if(a.length)return a.map(i=>i.key);let e=this.alternatorsByKey(),t=new Set(this.discoveredAlternatorIds());return Object.keys(e).filter(i=>{let o=e[i];return!!o&&t.has(o.id)}).sort((i,o)=>i.localeCompare(o))});visibleAlternators=L(()=>{let a=this.visibleAlternatorKeys(),e=this.alternatorsByKey();return a.map(t=>e[t]).filter(t=>!!t)});hasAlternators=L(()=>this.visibleAlternators().length>0);activeDisplayMode=L(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=L(()=>this.activeDisplayMode()==="compact");colorRole=L(()=>this.runtime.options()?.color??"contrast");ignoreZones=L(()=>this.runtime.options()?.ignoreZones??!1);displayLabel=L(()=>{let a=this.visibleAlternators();return a.length!==1?"Alternators":this.resolveTitleText(a[0])});labelColor=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a).dim:"var(--kip-contrast-dim-color)"});widgetColors=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a):null});displayModels=L(()=>{let a=this.visibleAlternators(),e=this.theme(),t=this.widgetColors(),i=this.ignoreZones(),o=new Map;a.forEach(l=>o.set(l.id,(o.get(l.id)??0)+1));let r=new Set([...o.entries()].filter(([,l])=>l>1).map(([l])=>l)),s={};for(let l of a){let m=l.deviceKey??l.id,h=!!l.source&&r.has(l.id),v=this.resolveMostSevereState(l.powerState??null,l.currentState??null,l.voltageState??null,l.temperatureState??null,l.chargingModeState??null,l.revolutionsState??null,l.fieldDriveState??null,l.regulatorTemperatureState??null),y=this.resolveMostSevereState(l.voltageState??null,l.currentState??null),C=this.resolveMostSevereState(l.powerState??null,l.revolutionsState??null,l.temperatureState??null,l.regulatorTemperatureState??null),[S,_]=this.buildMetricRows(l);s[m]={id:l.id,titleText:this.resolveTitleText(l),modeText:this.isCompactCardMode()?"":this.resolveModeText(l),busText:this.isCompactCardMode()?"":h?l.source??"-":l.associatedBus||l.location||"-",metricsLineOne:S,metricsLineTwo:_,stateBarColor:ht(v,t?.dim??"var(--kip-contrast-color)",e,i),titleTextColor:ht(v,"var(--kip-contrast-color)",e,i),metaTextColor:ht(this.resolveMostSevereState(l.chargingModeState??null,l.fieldDriveState??null),"var(--kip-contrast-dim-color)",e,i),primaryMetricsTextColor:ht(y,"var(--kip-contrast-color)",e,i),secondaryMetricsTextColor:ht(C,"var(--kip-contrast-color)",e,i)}}return s});constructor(){W(()=>{let t=this.runtime.options();t&&z(()=>this.applyConfig(t))}),W(()=>{let t=this.displayModels(),i=this.visibleAlternators(),o=this.widgetColors();!this.svg||!o||this.requestRender({alternators:i,displayModels:t,widgetColors:o})});let a=[this.data.subscribePathTreeWithInitial(n.ROOT_PATTERN)],e=!1;for(let t of a)if(t.initial.length){e=!0;for(let i of t.initial)this.enqueuePathUpdate(i,!0)}e&&(this.flushPendingPathUpdates(),this.initialPathPaintDone=!0);for(let t of a)t.live$.pipe(De(this.destroyRef)).subscribe(i=>{this.enqueuePathUpdate(i)})}ngAfterViewInit(){this.initializeSvg(),this.requestRender()}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null}initializeSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${n.CARD_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Alternator View"),this.layer=this.svg.append("g").attr("class","alternator-layer")}applyConfig(a){let e=this.resolveAlternatorConfig(a);this.trackedDevices.set(e.trackedDevices??[]),this.reprojectSnapshotsToDeviceKeys(e.trackedDevices??[]),this.optionsById.set(e.optionsById),this.cardMode.set(this.normalizeCardMode(e.cardMode))}reprojectSnapshotsToDeviceKeys(a){if(!a.length)return;let e=new Map;a.forEach(t=>{let i=e.get(t.id)??[];i.push(t.key),e.set(t.id,i)}),this.alternatorsByKey.update(t=>{let i=t,o=!1;return e.forEach((r,s)=>{let l=t[s];if(l){for(let m of r){if(t[m])continue;let h=a.find(v=>v.key===m);o||(i=Z({},t),o=!0),i[m]=ge(Z({},l),{source:h?.source??null,deviceKey:m})}o&&i[s]?.deviceKey===void 0&&delete i[s]}}),o?i:t})}resolveAlternatorConfig(a){let e=a.alternator,t=this.normalizeOptionsById(e?.optionsById??e?.alternatorOptionsById);return{trackedDevices:this.normalizeTrackedDevices(e?.trackedDevices),optionsById:t,cardMode:this.normalizeCardMode(e?.cardMode)}}normalizeTrackedDevices(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(!t||typeof t!="object")return;let i=t,o=this.normalizeOptionalString(i.id),r=this.normalizeOptionalString(i.source);if(!o||!r)return;let s=this.normalizeOptionalString(i.key)??`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}buildIdToDeviceKeysMap(){let a=new Map;return this.trackedDevices().forEach(e=>{let t=a.get(e.id)??[];t.push(e.key),a.set(e.id,t)}),a}normalizeCardMode(a){let e=a&&typeof a=="object"?a:null;if(!e)return{displayMode:"full",metrics:["voltage","current","power","revolutions"]};let t=this.normalizeStringList(e?.metrics);return{displayMode:e?.displayMode==="compact"?"compact":"full",metrics:t.length?t:["voltage","current","power","revolutions"]}}normalizeStringList(a){if(!Array.isArray(a))return[];let e=new Set;return a.forEach(t=>{if(typeof t!="string")return;let i=t.trim();i.length>0&&e.add(i)}),[...e].sort((t,i)=>t.localeCompare(i))}normalizeOptionsById(a){if(!a||typeof a!="object")return{};let e={};return Object.entries(a).forEach(([t])=>{let i=this.normalizeOptionalString(t);i&&(e[i]={})}),e}normalizeOptionalString(a){if(typeof a!="string")return null;let e=a.trim();return e.length>0?e:null}enqueuePathUpdate(a,e=!1){let t=this.parsePath(a.path);if(!t)return;let i=a.update?.data?.value??null,o=a.update?.state??null,r=`${t.id}::${t.key}`;if(this.pendingPathUpdates.set(r,{id:t.id,key:t.key,value:i,state:o}),!e){if(!this.initialPathPaintDone){this.initialPathPaintDone=!0,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates()},n.PATH_BATCH_WINDOW_MS))}}parsePath(a){let e=a.match(n.PATH_REGEX);return e?{id:e[1],key:e[2]}:null}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let a=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(a.map(i=>i.id)).forEach(i=>this.trackDiscoveredAlternator(i));let t=this.buildIdToDeviceKeysMap();this.alternatorsByKey.update(i=>{let o=i,r=!1;for(let s of a){let l=t.get(s.id),m=l?.length?l:[s.id];for(let h of m){let v=!!l?.length,y=v?this.trackedDevices().find(E=>E.key===h):null,C=o[h]??{id:s.id,source:y?.source??null,deviceKey:v?h:void 0},S=Z({},C);if(!this.applyValue(S,s.key,s.value,s.state))continue;let F=S.rawPower!=null?S.rawPower:S.voltage!=null&&S.current!=null?S.voltage*S.current:null;F!=null?S.power=Number.isFinite(F)?F:null:S.power=null,S.rawPower==null&&(S.powerState=this.resolveMostSevereState(S.voltageState??null,S.currentState??null)),r||(o=Z({},o),r=!0),o[h]=S}}return r?o:i})}trackDiscoveredAlternator(a){let e=this.discoveredAlternatorIds();e.includes(a)||this.discoveredAlternatorIds.set([...e,a].sort((t,i)=>t.localeCompare(i)))}applyValue(a,e,t,i){switch(e){case"name":return this.setValue(a,"name",this.toStringValue(t));case"location":return this.setValue(a,"location",this.toStringValue(t));case"associatedBus":return this.setValue(a,"associatedBus",this.toStringValue(t));case"chargingMode":return this.setMetricValue(a,"chargingMode","chargingModeState",this.toStringValue(t),i);case"voltage":return this.setMetricValue(a,"voltage","voltageState",this.toNumber(t,"V"),i);case"current":return this.setMetricValue(a,"current","currentState",this.toNumber(t,"A"),i);case"power":case"realPower":return this.setMetricValue(a,"rawPower","powerState",this.toNumber(t,"W"),i);case"temperature":return this.setMetricValue(a,"temperature","temperatureState",this.toNumber(t,this.units.getDefaults().Temperature),i);case"revolutions":return this.setMetricValue(a,"revolutions","revolutionsState",this.toNumber(t,"Hz"),i);case"fieldDrive":return this.setMetricValue(a,"fieldDrive","fieldDriveState",this.toNumber(t,"%"),i);case"regulatorTemperature":return this.setMetricValue(a,"regulatorTemperature","regulatorTemperatureState",this.toNumber(t,this.units.getDefaults().Temperature),i);case"setpointVoltage":return this.setMetricValue(a,"setpointVoltage","setpointVoltageState",this.toNumber(t,"V"),i);case"setpointCurrent":return this.setMetricValue(a,"setpointCurrent","setpointCurrentState",this.toNumber(t,"A"),i);default:return!1}}setValue(a,e,t){return Object.is(a[e],t)?!1:(a[e]=t,!0)}setMetricValue(a,e,t,i,o){let r=!Object.is(a[e],i),s=!Object.is(a[t],o);return!r&&!s?!1:(a[e]=i,a[t]=o,!0)}requestRender(a){let e=this.widgetColors();!this.svg||!e||(this.pendingRenderSnapshot=a??{alternators:this.visibleAlternators(),displayModels:this.displayModels(),widgetColors:e},this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let t=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,t&&this.render(t)})))}render(a){if(!this.layer||!this.svg)return;let e=this.isCompactCardMode(),t=e?ya:ci,i=e?n.COMPACT_CARD_HEIGHT:n.CARD_HEIGHT,o=a.alternators.map((h,v)=>({key:h.deviceKey??h.id,alternator:h,y:v*(i+n.CARD_GAP)})),r=o.length?o[o.length-1].y+i:i;this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${r}`);let s=this.layer.selectAll("g.alternator-card").data(o,h=>h.key),l=s.enter().append("g").attr("class","alternator-card");l.append("rect").attr("class","alternator-card-bg"),l.append("rect").attr("class","alternator-state-bar"),l.append("text").attr("class","alternator-title"),l.append("text").attr("class","alternator-id"),l.append("text").attr("class","alternator-mode"),l.append("text").attr("class","alternator-bus"),l.append("text").attr("class","alternator-metrics-1"),l.append("text").attr("class","alternator-metrics-2");let m=l.merge(s);m.attr("transform",h=>`translate(0, ${h.y})`),m.select("rect.alternator-card-bg").attr("x",.5).attr("y",.5).attr("rx",t.cardCornerRadius).attr("ry",t.cardCornerRadius).attr("width",n.VIEWBOX_WIDTH-1).attr("height",i-1).attr("stroke","var(--mat-sys-outline-variant)").attr("stroke-width",.5).attr("fill","none"),m.select("rect.alternator-state-bar").attr("x",1.5).attr("y",1.5).attr("rx",t.stateBarCornerRadius).attr("ry",t.stateBarCornerRadius).attr("width",3).attr("height",i-3).attr("fill",h=>a.displayModels[h.key]?.stateBarColor??a.widgetColors.dim),a.alternators.length>1?m.select("text.alternator-title").attr("x",t.titleX).attr("y",t.titleY).attr("font-size",t.titleFontSize).attr("fill",h=>a.displayModels[h.key]?.titleTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.titleText??this.resolveTitleText(h.alternator)):m.select("text.alternator-title").text(""),m.select("text.alternator-id").attr("x",t.idX).attr("y",t.idY).attr("text-anchor","end").attr("font-size",t.idFontSize).attr("fill","var(--kip-contrast-dim-color)").text(h=>h.alternator.id),m.select("text.alternator-mode").attr("x",t.metaLeftX).attr("y",t.metaY).attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",h=>a.displayModels[h.key]?.metaTextColor??"var(--kip-contrast-dim-color)").text(h=>a.displayModels[h.key]?.modeText??""),m.select("text.alternator-bus").attr("x",t.metaRightX).attr("y",t.metaY).attr("text-anchor","end").attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",h=>a.displayModels[h.key]?.metaTextColor??"var(--kip-contrast-dim-color)").text(h=>a.displayModels[h.key]?.busText??""),m.select("text.alternator-metrics-1").attr("x",t.lineOneX).attr("y",t.lineOneY).attr("font-size",t.lineOneFontSize).attr("fill",h=>a.displayModels[h.key]?.primaryMetricsTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.metricsLineOne??""),m.select("text.alternator-metrics-2").attr("x",t.lineTwoX).attr("y",t.lineTwoY).attr("font-size",t.lineTwoFontSize).attr("opacity",.85).attr("fill",h=>a.displayModels[h.key]?.secondaryMetricsTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.metricsLineTwo??""),s.exit().remove()}displayName(a){return a.name?.trim()||a.id}resolveTitleText(a){return a.name||`Alternator ${a.id}`}resolveModeText(a){return a.chargingMode?`Mode ${a.chargingMode}`:a.fieldDrive!=null?`Field ${a.fieldDrive.toFixed(0)} %`:"Mode -"}buildMetricRows(a){let e=this.cardMode();if(this.activeDisplayMode()==="full")return[`V ${this.formatValue(a.voltage,"V")} A ${this.formatValue(a.current,"A")}`,`P ${this.formatValue(a.power,"W")} RPM ${this.formatRevolutions(a.revolutions)}`];let t=e.metrics.map(r=>this.toMetricLabel(r,a)).filter(r=>!!r);if(!t.length)return["V - A -","P - RPM -"];let i=t.slice(0,2).join(" "),o=t.slice(2,4).join(" ");return[i||" ",o||" "]}toMetricLabel(a,e){switch(a){case"voltage":return`V ${this.formatValue(e.voltage,"V")}`;case"current":return`A ${this.formatValue(e.current,"A")}`;case"power":return`P ${this.formatValue(e.power,"W")}`;case"temperature":return`T ${this.formatTemperature(e.temperature)}`;case"revolutions":return`RPM ${this.formatRevolutions(e.revolutions)}`;case"fieldDrive":return`FD ${this.formatPercent(e.fieldDrive)}`;case"regulatorTemperature":return`RT ${this.formatTemperature(e.regulatorTemperature)}`;default:return null}}formatValue(a,e){return a==null||Number.isNaN(a)?"-":`${a.toFixed(1)} ${e}`}formatTemperature(a){return a==null||Number.isNaN(a)?"-":`${a.toFixed(1)} ${this.units.getDefaults().Temperature==="celsius"?"\xB0C":"\xB0F"}`}formatRevolutions(a){return a==null||Number.isNaN(a)?"-":Math.round(a*60).toString()}formatPercent(a){return a==null||Number.isNaN(a)?"-":`${a.toFixed(0)} %`}toStringValue(a){return typeof a=="string"?a:null}resolveMostSevereState(...a){return a.some(e=>e===J.Alert)?J.Alert:a.some(e=>e===J.Alarm)?J.Alarm:a.some(e=>e===J.Warn)?J.Warn:a.some(e=>e===J.Normal)?J.Normal:null}toNumber(a,e){if(a==null||typeof a=="boolean")return null;let t=typeof a=="number"?a:Number(a);if(!Number.isFinite(t))return null;let i=this.units.convertToUnit(e,t);return Number.isFinite(i)?i:t}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["widget-alternator"]],viewQuery:function(e,t){e&1&&_e(t.svgRef,tM,5),e&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:3,consts:[["alternatorSvg",""],[3,"text","color"],["aria-hidden","false",1,"alternator-svg"],[1,"alternator-empty"],[1,"alternator-empty-title"],[1,"alternator-empty-sub"]],template:function(e,t){e&1&&(O(0,"widget-title",1),oe(),O(1,"svg",2,0),I(3,iM,5,0,"div",3)),e&2&&(R("text",t.displayLabel())("color",t.labelColor()),f(3),P(t.hasAlternators()?-1:3))},dependencies:[Vt],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.alternator-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 10px 10px}.alternator-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.alternator-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.alternator-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}"],changeDetection:0})};var aM=["acSvg"];function oM(n,a){n&1&&(d(0,"div",3)(1,"div",4),c(2,"No AC buses detected"),u(),d(3,"div",5),c(4,"Check Signal K AC paths or select buses in widget settings."),u()())}var Pl=class n{static AC_DESCRIPTOR=zi("widget-ac");static SELF_ROOT_PATH=(()=>{let a=n.AC_DESCRIPTOR?.selfRootPath;if(!a)throw new Error("[WidgetAcComponent] Descriptor missing or selfRootPath not set; check widget registration.");return a})();static ROOT_PATTERN=`${n.SELF_ROOT_PATH}.*`;static ROOT_PREFIX=`${n.SELF_ROOT_PATH}.`;static VIEWBOX_WIDTH=200;static CARD_HEIGHT=100;static COMPACT_CARD_HEIGHT=100;static CARD_GAP=8;static PATH_BATCH_WINDOW_MS=500;static RESERVED_AC_AGGREGATE_IDS=new Set(["totalCurrent","totalPower"]);static DEFAULT_CONFIG={color:"contrast",ignoreZones:!1,ac:{trackedDevices:[],optionsById:{}}};id=x.required();type=x.required();theme=x.required();renderMode=x(null);runtime=A(xe);data=A(st);units=A(He);destroyRef=A(Ie);svgRef=he.required("acSvg");svg;layer;pendingPathUpdates=new Map;pathBatchTimerId=null;initialPathPaintDone=!1;renderFrameId=null;pendingRenderSnapshot=null;discoveredBusIds=w([]);trackedDevices=w([]);optionsById=w({});cardMode=w({displayMode:"full",metrics:["line1Voltage","line1Current","line1Frequency","line2Voltage"]});busesByKey=w({});visibleBusKeys=L(()=>{let a=this.trackedDevices();if(a.length)return a.map(i=>i.key);let e=this.busesByKey(),t=new Set(this.discoveredBusIds());return Object.keys(e).filter(i=>{let o=e[i];return!!o&&t.has(o.id)}).sort((i,o)=>i.localeCompare(o))});visibleBuses=L(()=>{let a=this.visibleBusKeys(),e=this.busesByKey();return a.map(t=>e[t]).filter(t=>!!t)});hasBuses=L(()=>this.visibleBuses().length>0);activeDisplayMode=L(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=L(()=>this.activeDisplayMode()==="compact");colorRole=L(()=>this.runtime.options()?.color??"contrast");ignoreZones=L(()=>this.runtime.options()?.ignoreZones??!1);displayLabel=L(()=>{let a=this.visibleBuses();return a.length!==1?"AC Buses":this.resolveTitleText(a[0])});labelColor=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a).dim:"var(--kip-contrast-dim-color)"});widgetColors=L(()=>{let a=this.theme();return a?Ce(this.colorRole(),a):null});displayModels=L(()=>{let a=this.visibleBuses(),e=this.theme(),t=this.widgetColors(),i=this.ignoreZones(),o=new Map;a.forEach(l=>o.set(l.id,(o.get(l.id)??0)+1));let r=new Set([...o.entries()].filter(([,l])=>l>1).map(([l])=>l)),s={};for(let l of a){let m=l.deviceKey??l.id,h=!!l.source&&r.has(l.id),v=this.resolveMostSevereState(l.line1VoltageState??null,l.line1CurrentState??null,l.line2VoltageState??null,l.line2CurrentState??null,l.line3VoltageState??null,l.line3CurrentState??null,l.modeState??null),y=this.resolveMostSevereState(l.line1VoltageState??null,l.line1CurrentState??null,l.line1FrequencyState??null),C=this.resolveMostSevereState(l.line2VoltageState??null,l.line2CurrentState??null,l.line3VoltageState??null,l.line3CurrentState??null),[S,_]=this.buildMetricRows(l);s[m]={id:l.id,titleText:this.resolveTitleText(l),modeText:this.isCompactCardMode()?"":this.resolveModeText(l),busText:this.isCompactCardMode()?"":h?l.source??"-":l.associatedBus||l.location||"-",metricsLineOne:S,metricsLineTwo:_,stateBarColor:ht(v,t?.dim??"var(--kip-contrast-color)",e,i),titleTextColor:ht(v,"var(--kip-contrast-color)",e,i),metaTextColor:ht(l.modeState??null,"var(--kip-contrast-dim-color)",e,i),primaryMetricsTextColor:ht(y,"var(--kip-contrast-color)",e,i),secondaryMetricsTextColor:ht(C,"var(--kip-contrast-color)",e,i)}}return s});constructor(){W(()=>{let t=this.runtime.options();t&&z(()=>this.applyConfig(t))}),W(()=>{let t=this.displayModels(),i=this.visibleBuses(),o=this.widgetColors();!this.svg||!o||this.requestRender({buses:i,displayModels:t,widgetColors:o})});let a=[this.data.subscribePathTreeWithInitial(n.ROOT_PATTERN)],e=!1;for(let t of a)if(t.initial.length){e=!0;for(let i of t.initial)this.enqueuePathUpdate(i,!0)}e&&(this.flushPendingPathUpdates(),this.initialPathPaintDone=!0);for(let t of a)t.live$.pipe(De(this.destroyRef)).subscribe(i=>this.enqueuePathUpdate(i))}ngAfterViewInit(){this.initializeSvg(),this.requestRender()}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null}initializeSvg(){this.svg=Wt(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${n.CARD_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","AC View"),this.layer=this.svg.append("g").attr("class","ac-layer")}applyConfig(a){let e=this.resolveAcConfig(a);this.trackedDevices.set(e.trackedDevices??[]),this.reprojectSnapshotsToDeviceKeys(e.trackedDevices??[]),this.optionsById.set(e.optionsById),this.cardMode.set(this.normalizeCardMode(e.cardMode))}reprojectSnapshotsToDeviceKeys(a){if(!a.length)return;let e=new Map;a.forEach(t=>{let i=e.get(t.id)??[];i.push(t.key),e.set(t.id,i)}),this.busesByKey.update(t=>{let i=t,o=!1;return e.forEach((r,s)=>{let l=t[s];if(l){for(let m of r){if(t[m])continue;let h=a.find(v=>v.key===m);o||(i=Z({},t),o=!0),i[m]=ge(Z({},l),{source:h?.source??null,deviceKey:m})}o&&i[s]?.deviceKey===void 0&&delete i[s]}}),o?i:t})}resolveAcConfig(a){let e=a.ac;return{trackedDevices:this.normalizeAcTrackedDevices(e?.trackedDevices),optionsById:this.normalizeOptionsById(e?.optionsById),cardMode:this.normalizeCardMode(e?.cardMode)}}normalizeAcTrackedDevices(a){if(!Array.isArray(a))return[];let e=new Map;return a.forEach(t=>{if(!t||typeof t!="object")return;let i=t,o=this.normalizeOptionalString(i.id),r=this.normalizeOptionalString(i.source);if(!o||!r||n.RESERVED_AC_AGGREGATE_IDS.has(o))return;let s=this.normalizeOptionalString(i.key)??`${o}||${r}`;e.set(s,{id:o,source:r,key:s})}),[...e.values()].sort((t,i)=>t.key.localeCompare(i.key))}buildIdToDeviceKeysMap(){let a=new Map;return this.trackedDevices().forEach(e=>{let t=a.get(e.id)??[];t.push(e.key),a.set(e.id,t)}),a}normalizeCardMode(a){let e=a&&typeof a=="object"?a:null,t=this.normalizeStringList(e?.metrics);return{displayMode:e?.displayMode==="compact"?"compact":"full",metrics:t.length?t:["line1Voltage","line1Current","line1Frequency","line2Voltage"]}}normalizeStringList(a){if(!Array.isArray(a))return[];let e=new Set;return a.forEach(t=>{if(typeof t!="string")return;let i=t.trim();i.length>0&&e.add(i)}),[...e].sort((t,i)=>t.localeCompare(i))}normalizeOptionsById(a){if(!a||typeof a!="object")return{};let e={};return Object.entries(a).forEach(([t])=>{let i=this.normalizeOptionalString(t);i&&(e[i]={})}),e}normalizeOptionalString(a){if(typeof a!="string")return null;let e=a.trim();return e.length>0?e:null}enqueuePathUpdate(a,e=!1){let t=this.parsePath(a.path);if(!t)return;let i=a.update?.data?.value??null,o=a.update?.state??null;if(this.pendingPathUpdates.set(`${t.id}::${t.key}`,{id:t.id,key:t.key,value:i,state:o}),!e){if(!this.initialPathPaintDone){this.initialPathPaintDone=!0,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates()},n.PATH_BATCH_WINDOW_MS))}}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let a=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(a.map(i=>i.id)).forEach(i=>this.trackDiscoveredBus(i));let t=this.buildIdToDeviceKeysMap();this.busesByKey.update(i=>{let o=i,r=!1;for(let s of a){let l=t.get(s.id),m=l?.length?l:[s.id];for(let h of m){let v=!!l?.length,y=v?this.trackedDevices().find(F=>F.key===h):null,C=o[h]??{id:s.id,source:y?.source??null,deviceKey:v?h:void 0},S=Z({},C);this.applyValue(S,s.key,s.value,s.state)&&(r||(o=Z({},o),r=!0),o[h]=S)}}return r?o:i})}parsePath(a){if(!a.startsWith(n.ROOT_PREFIX))return null;let e=a.slice(n.ROOT_PREFIX.length),t=e.indexOf(".");return t<=0||t===e.length-1?null:{id:e.slice(0,t),key:e.slice(t+1)}}normalizeMetricKey(a){let e=a.match(/^phase\.([^.]+)\.(current|frequency|lineNeutralVoltage|realPower)$/);if(e){let t=this.resolveLineKey(e[1]);if(!t)return null;let i=e[2];return i==="current"?`${t}.current`:i==="frequency"?`${t}.frequency`:i==="lineNeutralVoltage"?`${t}.voltage`:`${t}.realPower`}return a==="total.realPower"?"power":a}resolveLineKey(a){let e=a.trim().toLowerCase();return["0","1","l1","line1","phase1","a"].includes(e)?"line1":["2","l2","line2","phase2","b"].includes(e)?"line2":["3","l3","line3","phase3","c"].includes(e)?"line3":null}trackDiscoveredBus(a){let e=this.discoveredBusIds();e.includes(a)||this.discoveredBusIds.set([...e,a].sort((t,i)=>t.localeCompare(i)))}applyValue(a,e,t,i){let o=this.normalizeMetricKey(e);if(!o)return!1;switch(o){case"name":return this.setValue(a,"name",this.toStringValue(t));case"location":return this.setValue(a,"location",this.toStringValue(t));case"associatedBus":return this.setValue(a,"associatedBus",this.toStringValue(t));case"mode":return this.setMetricValue(a,"mode","modeState",this.toStringValue(t),i);case"voltage":return this.setMetricValue(a,"line1Voltage","line1VoltageState",this.toNumber(t,"V"),i);case"current":return this.setMetricValue(a,"line1Current","line1CurrentState",this.toNumber(t,"A"),i);case"frequency":return this.setMetricValue(a,"line1Frequency","line1FrequencyState",this.toNumber(t,"Hz"),i);case"line1.voltage":return this.setMetricValue(a,"line1Voltage","line1VoltageState",this.toNumber(t,"V"),i);case"line1.current":return this.setMetricValue(a,"line1Current","line1CurrentState",this.toNumber(t,"A"),i);case"line1.frequency":return this.setMetricValue(a,"line1Frequency","line1FrequencyState",this.toNumber(t,"Hz"),i);case"line1.realPower":return this.setMetricValue(a,"power","line1CurrentState",this.toNumber(t,"W"),i);case"line2.voltage":return this.setMetricValue(a,"line2Voltage","line2VoltageState",this.toNumber(t,"V"),i);case"line2.current":return this.setMetricValue(a,"line2Current","line2CurrentState",this.toNumber(t,"A"),i);case"line2.frequency":return this.setMetricValue(a,"line2Frequency","line2FrequencyState",this.toNumber(t,"Hz"),i);case"line2.realPower":return this.setMetricValue(a,"power","line2CurrentState",this.toNumber(t,"W"),i);case"line3.voltage":return this.setMetricValue(a,"line3Voltage","line3VoltageState",this.toNumber(t,"V"),i);case"line3.current":return this.setMetricValue(a,"line3Current","line3CurrentState",this.toNumber(t,"A"),i);case"line3.frequency":return this.setMetricValue(a,"line3Frequency","line3FrequencyState",this.toNumber(t,"Hz"),i);case"line3.realPower":return this.setMetricValue(a,"power","line3CurrentState",this.toNumber(t,"W"),i);case"power":return this.setMetricValue(a,"power","line1CurrentState",this.toNumber(t,"W"),i);default:return!1}}setValue(a,e,t){return Object.is(a[e],t)?!1:(a[e]=t,!0)}setMetricValue(a,e,t,i,o){let r=!Object.is(a[e],i),s=!Object.is(a[t],o);return!r&&!s?!1:(a[e]=i,a[t]=o,!0)}requestRender(a){let e=this.widgetColors();!this.svg||!e||(this.pendingRenderSnapshot=a??{buses:this.visibleBuses(),displayModels:this.displayModels(),widgetColors:e},this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let t=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,t&&this.render(t)})))}render(a){if(!this.layer||!this.svg)return;let e=this.isCompactCardMode(),t=e?ya:ci,i=e?n.COMPACT_CARD_HEIGHT:n.CARD_HEIGHT,o=a.buses.map((h,v)=>({key:h.deviceKey??h.id,bus:h,y:v*(i+n.CARD_GAP)})),r=o.length?o[o.length-1].y+i:i;this.svg.attr("viewBox",`0 0 ${n.VIEWBOX_WIDTH} ${r}`);let s=this.layer.selectAll("g.ac-card").data(o,h=>h.key),l=s.enter().append("g").attr("class","ac-card");l.append("rect").attr("class","ac-state-bar"),l.append("text").attr("class","ac-title"),l.append("text").attr("class","ac-id"),l.append("text").attr("class","ac-mode"),l.append("text").attr("class","ac-bus"),l.append("text").attr("class","ac-metrics-1"),l.append("text").attr("class","ac-metrics-2");let m=l.merge(s);m.attr("transform",h=>`translate(0, ${h.y})`),m.select("rect.ac-state-bar").attr("x",1.5).attr("y",1.5).attr("rx",t.stateBarCornerRadius).attr("ry",t.stateBarCornerRadius).attr("width",3).attr("height",i-3).attr("fill",h=>a.displayModels[h.key]?.stateBarColor??a.widgetColors.dim),a.buses.length>1?m.select("text.ac-title").attr("x",t.titleX).attr("y",t.titleY).attr("font-size",t.titleFontSize).attr("fill",h=>a.displayModels[h.key]?.titleTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.titleText??this.resolveTitleText(h.bus)):m.select("text.ac-title").text(""),m.select("text.ac-id").attr("x",t.idX).attr("y",t.idY).attr("text-anchor","end").attr("font-size",t.idFontSize).attr("fill","var(--kip-contrast-dim-color)").text(h=>h.bus.id),m.select("text.ac-mode").attr("x",t.metaLeftX).attr("y",t.metaY).attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",h=>a.displayModels[h.key]?.metaTextColor??"var(--kip-contrast-dim-color)").text(h=>a.displayModels[h.key]?.modeText??""),m.select("text.ac-bus").attr("x",t.metaRightX).attr("y",t.metaY).attr("text-anchor","end").attr("font-size",t.metaFontSize).attr("opacity",.8).attr("fill",h=>a.displayModels[h.key]?.metaTextColor??"var(--kip-contrast-dim-color)").text(h=>a.displayModels[h.key]?.busText??""),m.select("text.ac-metrics-1").attr("x",t.lineOneX).attr("y",t.lineOneY).attr("font-size",t.lineOneFontSize).attr("fill",h=>a.displayModels[h.key]?.primaryMetricsTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.metricsLineOne??""),m.select("text.ac-metrics-2").attr("x",t.lineTwoX).attr("y",t.lineTwoY).attr("font-size",t.lineTwoFontSize).attr("opacity",.85).attr("fill",h=>a.displayModels[h.key]?.secondaryMetricsTextColor??"var(--kip-contrast-color)").text(h=>a.displayModels[h.key]?.metricsLineTwo??""),s.exit().remove()}displayName(a){return a.name?.trim()||a.id}resolveTitleText(a){return a.name||`AC ${a.id}`}resolveModeText(a){return a.mode?`Mode ${a.mode}`:"Mode -"}buildMetricRows(a){let e=this.cardMode(),t=(e.metrics.length?e.metrics:n.DEFAULT_CONFIG.ac?.cardMode?.metrics??[]).map(r=>this.toMetricLabel(r,a)).filter(r=>!!r);if(!t.length)return["L1 - - -","L2 - - L3 - -"];let i=t.slice(0,2).join(" "),o=t.slice(2,4).join(" ");return[i||" ",o||" "]}toMetricLabel(a,e){switch(a){case"line1Voltage":return`L1V ${this.formatValue(e.line1Voltage,"V")}`;case"line1Current":return`L1A ${this.formatValue(e.line1Current,"A")}`;case"line1Frequency":return`L1Hz ${this.formatValue(e.line1Frequency,"Hz")}`;case"line2Voltage":return`L2V ${this.formatValue(e.line2Voltage,"V")}`;case"line2Current":return`L2A ${this.formatValue(e.line2Current,"A")}`;case"line2Frequency":return`L2Hz ${this.formatValue(e.line2Frequency,"Hz")}`;case"line3Voltage":return`L3V ${this.formatValue(e.line3Voltage,"V")}`;case"line3Current":return`L3A ${this.formatValue(e.line3Current,"A")}`;case"line3Frequency":return`L3Hz ${this.formatValue(e.line3Frequency,"Hz")}`;default:return null}}formatValue(a,e){return a==null||Number.isNaN(a)?"-":`${a.toFixed(1)} ${e}`}toStringValue(a){return typeof a=="string"?a:null}resolveMostSevereState(...a){return a.some(e=>e===J.Alert)?J.Alert:a.some(e=>e===J.Alarm)?J.Alarm:a.some(e=>e===J.Warn)?J.Warn:a.some(e=>e===J.Normal)?J.Normal:null}toNumber(a,e){if(a==null||typeof a=="boolean")return null;let t=typeof a=="number"?a:Number(a);if(!Number.isFinite(t))return null;let i=this.units.convertToUnit(e,t);return typeof i=="number"&&Number.isFinite(i)?i:null}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["widget-ac"]],viewQuery:function(e,t){e&1&&_e(t.svgRef,aM,5),e&2&&Me()},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:3,consts:[["acSvg",""],[3,"text","color"],["aria-hidden","false",1,"ac-svg"],[1,"ac-empty"],[1,"ac-empty-title"],[1,"ac-empty-sub"]],template:function(e,t){e&1&&(O(0,"widget-title",1),oe(),O(1,"svg",2,0),I(3,oM,5,0,"div",3)),e&2&&(R("text",t.displayLabel())("color",t.labelColor()),f(3),P(t.hasBuses()?-1:3))},dependencies:[Vt],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.ac-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 10px 10px}.ac-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.ac-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.ac-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}"],changeDetection:0})};var rM=["Core","Gauge","Component","Racing"];var Ml=(()=>{class n{_pluginConfig=A(gs);_widgetCategories=[...rM];_componentTypeCache=new Map;_componentTypeMap={WidgetNumericComponent:Xm,WidgetTextComponent:Zm,WidgetWindTrendsChartComponent:Qm,WidgetWindComponent:ih,WidgetTutorialComponent:nh,WidgetSliderComponent:ah,WidgetSimpleLinearComponent:rh,WidgetRacesteerComponent:dh,WidgetRacerTimerComponent:uh,WidgetRacerLineComponent:mh,WidgetRaceTimerComponent:hh,WidgetPositionComponent:ph,WidgetAisRadarComponent:sg,WidgetLabelComponent:dg,WidgetIframeComponent:cg,WidgetHorizonComponent:ug,WidgetHeelGaugeComponent:mg,WidgetSteelGaugeComponent:pg,WidgetGaugeNgRadialComponent:Cg,WidgetGaugeNgLinearComponent:Sg,WidgetGaugeNgCompassComponent:Mg,WidgetFreeboardskComponent:rm,WidgetAnchorAlarmComponent:Tg,WidgetDatetimeComponent:kg,WidgetDataChartComponent:Cf,WidgetBooleanSwitchComponent:_f,WidgetMultiStateSwitchComponent:Tf,WidgetZonesStatePanelComponent:Df,WidgetAutopilotComponent:Nf,WidgetBmsComponent:Tl,WidgetSolarChargerComponent:kl,WidgetChargerComponent:Dl,WidgetInverterComponent:El,WidgetAlternatorComponent:Il,WidgetAcComponent:Pl};_widgetDefinition=[{name:"Numeric",description:"Displays numeric data in a clear and concise format, with options to show minimum and/or maximum recorded values. Includes an optional background minichart for quick visual trend insights.",icon:"numericWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-numeric",componentClassName:"WidgetNumericComponent"},{name:"Text",description:"Displays text data with a customizable color formatting option.",icon:"textWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-text",componentClassName:"WidgetTextComponent"},{name:"Date & Time",description:"Displays date and time data with fully custom formatting options and timezone correction.",icon:"datetimeWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-datetime",componentClassName:"WidgetDatetimeComponent"},{name:"Position",description:"Displays latitude and longitude for location tracking and navigation.",icon:"positionWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-position",componentClassName:"WidgetPositionComponent"},{name:"Static Label",description:"A static text widget that allows you to add customizable labels to your dashboard, helping to organize and clarify your layout effectively.",icon:"labelWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-label",componentClassName:"WidgetLabelComponent"},{name:"Switch Panel",description:"A Digital Switching panel group with multiple controls including toggle switches, indicator lights, and press buttons to send Signal K paths values and other operations.",icon:"switchpanelWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-boolean-switch",componentClassName:"WidgetBooleanSwitchComponent"},{name:"Multi-State Switch",description:"Lists all available device/path operating modes/states (e.g., On, Off, Charge Only, Invert Only), highlights the current state, and lets you select a new state to send to the device and see the result.",icon:"multiStateSwitchWidget",minWidth:2,minHeight:2,defaultWidth:4,defaultHeight:4,category:"Core",requiredPlugins:[],selector:"widget-multi-state-switch",componentClassName:"WidgetMultiStateSwitchComponent"},{name:"Zones State Panel",description:"Displays the data state (severity and message) of the path's Zones (based on Signal K path metadata configuration).",icon:"zonesStatePanel",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Core",requiredPlugins:[],selector:"widget-zones-state-panel",componentClassName:"WidgetZonesStatePanelComponent"},{name:"Slider",description:"A Digital Switching range slider that allows users to adjust values, such as controlling lighting intensity or audio volume from 0% to 100%.",icon:"sliderWidget",minWidth:2,minHeight:2,defaultWidth:4,defaultHeight:4,category:"Core",requiredPlugins:[],selector:"widget-slider",componentClassName:"WidgetSliderComponent"},{name:"Compact Linear",description:"A simple horizontal linear gauge with a large value label offering a clean, compact modern look.",icon:"simpleLinearGauge",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-simple-linear",componentClassName:"WidgetSimpleLinearComponent"},{name:"Linear",description:"A horizontal or vertical linear gauge that supports zone highlighting.",icon:"linearGauge",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-gauge-ng-linear",componentClassName:"WidgetGaugeNgLinearComponent"},{name:"Radial",description:"A radial gauge with configurable capacity and measurement dials plus zone highlighting.",icon:"radialGauge",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-gauge-ng-radial",componentClassName:"WidgetGaugeNgRadialComponent"},{name:"Compass",description:"A faceplate or card-style rotating compass gauge with multiple cardinal point indicator options.",icon:"compassGauge",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-gauge-ng-compass",componentClassName:"WidgetGaugeNgCompassComponent"},{name:"Level Gauge",description:"Dual-scale heel angle indicator combining a high\u2011precision \xB15\xB0 fine level with a wide \xB140\xB0 coarse arc for fast trim tuning and broader heel / sea\u2011state monitoring.",icon:"level",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-heel-gauge",componentClassName:"WidgetHeelGaugeComponent"},{name:"Pitch & Roll",description:"Horizon-style attitude indicator showing live pitch and roll degrees with smooth animation\u2014ideal for monitoring trim, heel, and sea-state response.",icon:"pitchRollGauge",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-horizon",componentClassName:"WidgetHorizonComponent"},{name:"Classic Steel",description:"A traditional steel looking linear & radial gauges replica that supports range sizes and zones highlights.",icon:"steelGauge",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-gauge-steel",componentClassName:"WidgetSteelGaugeComponent"},{name:"Battery Monitor",description:"Displays battery banks and individual batteries with aggregated bank totals plus per-battery detail cards. See key BMS values such as state of charge, current, voltage, power, temperature, capacity, and time remaining for a clearer view of overall bank health and individual battery status.",icon:"battery_charging",minWidth:2,minHeight:2,defaultWidth:6,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-bms",componentClassName:"WidgetBmsComponent"},{name:"Solar Charger",description:"Track solar generation and charging performance at a glance with live panel output, battery-side metrics, and clear charger and relay status indicators.",icon:"solar_charger",minWidth:2,minHeight:2,defaultWidth:6,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-solar-charger",componentClassName:"WidgetSolarChargerComponent"},{name:"AC/DC Charger",description:"Track charger output and charging state with voltage, current, power, and temperature monitoring, including real-time charging stage indicators.",icon:"charger",minWidth:2,minHeight:2,defaultWidth:6,defaultHeight:6,category:"Gauge",requiredPlugins:[],selector:"widget-charger",componentClassName:"WidgetChargerComponent"},{name:"Windsteer",description:"A wind steering display that combines wind, wind sectors, heading, course over ground and next waypoint information.",icon:"windsteeringWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Component",requiredPlugins:[],selector:"widget-wind-steer",componentClassName:"WidgetWindComponent"},{name:"Freeboard-SK",description:"Adds the Freeboard-SK chart plotter as a widget with automatic sign-in to your dashboard.",icon:"freeboardWidget",minWidth:6,minHeight:8,defaultWidth:6,defaultHeight:14,category:"Component",requiredPlugins:["freeboard-sk","tracks","resources-provider","course-provider"],selector:"widget-freeboardsk",componentClassName:"WidgetFreeboardskComponent"},{name:"Autopilot Head",description:"Provides typical autopilot controls for Signal K v1 & v2 Autopilot API devices. Requires a compatible hardware-specific Autopilot plugin for full functionality.",icon:"autopilotWidget",minWidth:3,minHeight:9,defaultWidth:4,defaultHeight:10,category:"Component",requiredPlugins:[],anyOfPlugins:["autopilot","pypilot-autopilot-provider"],selector:"widget-autopilot",componentClassName:"WidgetAutopilotComponent"},{name:"Realtime Data Chart",description:"Visualizes data on a real-time chart with multiple preconfigured series including actuals, SMA and period overall averages and Min/Max. Requires the KIP Dataset to be configured.",icon:"datachartWidget",minWidth:2,minHeight:3,defaultWidth:6,defaultHeight:6,category:"Component",requiredPlugins:[],selector:"widget-data-chart",componentClassName:"WidgetDataChartComponent"},{name:"Anchor Watch",description:"Monitors your anchor position and triggers an alarm if you drift outside a configured radius (anchor drag). Set the anchor point, watch radius, and alarm behavior (sound/notification) in the widget config. Requires internet connectivity to view map.",icon:"anchorWatch",minWidth:6,minHeight:8,defaultWidth:6,defaultHeight:14,category:"Component",requiredPlugins:["anchoralarm"],selector:"widget-anchor-alarm",componentClassName:"WidgetAnchorAlarmComponent"},{name:"AIS Radar",description:"Displays AIS targets with range rings, interactive target details, and quick zoom and filtering controls.",icon:"aisradar",minWidth:4,minHeight:4,defaultWidth:5,defaultHeight:8,category:"Component",requiredPlugins:[],selector:"widget-ais-radar",componentClassName:"WidgetAisRadarComponent"},{name:"Embed Webpage Viewer",description:"Embeds external web-based applications\u2014such as Grafana graphs or other Signal K apps\u2014into your dashboard for seamless integration. Interaction is disabled by default but can be enabled.",icon:"embedWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Component",requiredPlugins:[],selector:"widget-iframe",componentClassName:"WidgetIframeComponent"},{name:"Tutorial",description:"An instructional widget that guides new users through basic navigation, gestures, and dashboard editing steps.",icon:"helpWidget",minWidth:4,minHeight:4,defaultWidth:4,defaultHeight:6,category:"Component",requiredPlugins:[],selector:"widget-tutorial",componentClassName:"WidgetTutorialComponent"},{name:"Racesteer (BETA)",description:"A dynamic race steering display that fuses polar performance data with live conditions to guide optimal steering, tacking, and gybing angles for maximum speed. Instantly compare performance against competition polars for smarter tactical decisions.",icon:"racesteeringWidget",minWidth:1,minHeight:2,defaultWidth:4,defaultHeight:6,category:"Racing",requiredPlugins:["signalk-polar-performance-plugin"],selector:"widget-racesteer",componentClassName:"WidgetRacesteerComponent"},{name:"Racer - Start Line Insight",description:"Gain a tactical advantage for racing starts: set and adjust the port and starboard ends of the start line, see your distance to the line, the favored end, and how much the line is favored or unfavored. Includes visual integration with Freeboard SK for interactive line adjustment and display.",icon:"racerlineWidget",minWidth:4,minHeight:4,defaultWidth:4,defaultHeight:4,requiredPlugins:["signalk-racer"],category:"Racing",selector:"widget-racer-line",componentClassName:"WidgetRacerLineComponent"},{name:"Racer - Start Timer",description:"An advanced racing countdown timer that indicates OCS (On Course Side) status. Set the start line, choose or adjust the duration, or specify the exact start time. Automatically switches to the target dashboard at the start unless over early.",icon:"racertimerWidget",minWidth:4,minHeight:4,defaultWidth:4,defaultHeight:4,requiredPlugins:["signalk-racer"],category:"Racing",selector:"widget-racer-timer",componentClassName:"WidgetRacerTimerComponent"},{name:"Countdown Timer",description:"A simple race start countdown timer that can be started, paused, synced, reset, and configured for duration.",icon:"racetimerWidget",minWidth:4,minHeight:4,defaultWidth:6,defaultHeight:7,category:"Racing",requiredPlugins:[],selector:"widget-racetimer",componentClassName:"WidgetRaceTimerComponent"},{name:"Wind Trends",description:"A real-time wind trends graph with dual axes for direction and speed. Displays live values and simple moving averages over the current period\u2019s average.",icon:"windtrendsWidget",minWidth:8,minHeight:6,defaultWidth:10,defaultHeight:8,category:"Racing",requiredPlugins:[],selector:"widget-windtrends-chart",componentClassName:"WidgetWindTrendsChartComponent"}];get kipWidgets(){return this._widgetDefinition}get categories(){return this._widgetCategories}getComponentType(e){let t=this._componentTypeCache.get(e);if(t)return t;let i=this._widgetDefinition.find(r=>r.selector===e);if(!i)return;let o=this._componentTypeMap[i.componentClassName];if(o)return this._componentTypeCache.set(e,o),o}getKipWidgetsWithStatus(){return Le(this,null,function*(){let e={},t=Array.from(new Set(this._widgetDefinition.flatMap(i=>[...i.requiredPlugins||[],...i.anyOfPlugins||[]])));return yield Promise.all(t.map(i=>Le(this,null,function*(){let o=yield this._pluginConfig.getPlugin(i);e[i]=o.ok}))),this._widgetDefinition.map(i=>{let o=i.requiredPlugins||[],r=i.anyOfPlugins||[],s=o.map(v=>({name:v,enabled:e[v],required:!0})),l=r.map(v=>({name:v,enabled:e[v],required:!1})),m=[...s,...l],h=s.every(v=>v.enabled);return h&&r.length>0&&(h=l.some(v=>v.enabled)),ge(Z({},i),{isDependencyValid:h,pluginsStatus:m})})})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function sM(n,a){n&1&&(d(0,"span"),c(1,", "),u())}function lM(n,a){if(n&1&&(d(0,"span",8),c(1),d(2,"span",9),c(3),u()(),I(4,sM,2,0,"span")),n&2){let e=a.$implicit,t=a.$index,i=a.$count,o=T(2);R("ngClass",o.pluginDependencyValid()?e.required?"dependency-required-ok":e.enabled?"dependency-optional-ok":"dependency-optional-missing-met":e.enabled?e.required?"dependency-required-ok":"dependency-optional-ok":e.required?"dependency-required-error":"dependency-optional-error"),ie("title",e.required?"Required":"Optional"),f(),Ut(" ",e.enabled?"\u2714":"\u2716"," ",e.name," "),f(2),Q(e.required?"":"(optional)"),f(),P(t!==i-1?4:-1)}}function dM(n,a){if(n&1&&(d(0,"div",7)(1,"span"),c(2,"Plugins:"),u(),ye(3,lM,5,6,null,null,Re),u()),n&2){let e=T();_a(e.pluginsStatus().length>0?"margin-bottom: 8px;margin-top: 4px;":""),f(),ct(e.pluginDependencyValid()?"":"dependency-error"),f(2),Ae(e.pluginsStatus())}}var Vf=(()=>{class n{svgIcon=x.required();iconSize=x.required();name=x.required();description=x.required();pluginsStatus=x.required();pluginDependencyValid=x.required();onKeydown(e){(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),e.target.click())}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-list-card"]],hostBindings:function(t,i){t&1&&$("keydown",function(r){return i.onKeydown(r)})},inputs:{svgIcon:[1,"svgIcon"],iconSize:[1,"iconSize"],name:[1,"name"],description:[1,"description"],pluginsStatus:[1,"pluginsStatus"],pluginDependencyValid:[1,"pluginDependencyValid"]},decls:9,vars:11,consts:[["role","button","tabindex","0",1,"item-container"],[1,"item-icon"],["aria-hidden","false",3,"svgIcon"],[1,"item-label"],[1,"title","no-text-select"],[1,"dependency","no-text-select",3,"style"],[1,"description","no-text-select"],[1,"dependency","no-text-select"],[3,"ngClass"],[1,"plugin-type-label"]],template:function(t,i){t&1&&(d(0,"div",0)(1,"div",1),O(2,"mat-icon",2),u(),d(3,"div",3)(4,"p",4),c(5),u(),I(6,dM,5,4,"div",5),d(7,"span",6),c(8),u()()()),t&2&&(ie("aria-disabled",i.pluginDependencyValid()?null:"true"),f(2),Te("width",i.iconSize(),"px")("height",i.iconSize(),"px"),R("svgIcon",i.svgIcon()),f(2),_a(i.pluginsStatus().length>0?"margin-bottom:0px; margin-top: 4px":""),f(),Q(i.name()),f(),P(i.pluginsStatus().length>0?6:-1),f(2),Q(i.description()))},dependencies:[Uc,Gc,Xe,je],styles:["[_nghost-%COMP%]{display:block;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;padding:0}.item-container[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:stretch;width:100%;height:100%;margin:0;padding:15px;border:solid 1px var(--mat-sys-outline);cursor:pointer}.item-container[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-inverse-on-surface)}.item-container[_ngcontent-%COMP%]:focus-visible{background-color:var(--mat-sys-surface-bright);outline:-webkit-focus-ring-color auto 0px}.item-icon[_ngcontent-%COMP%]{width:48px}.item-label[_ngcontent-%COMP%]{width:calc(100% - 48px);text-align:left;padding-left:15px}.title[_ngcontent-%COMP%]{font-size:var(--mat-sys-label-medium-line-height)}.description[_ngcontent-%COMP%]{color:var(--mat-sys-outline)}.dependency[_ngcontent-%COMP%]{color:var(--mat-sys-outline);text-align:start;font-style:italic;font-size:var(--mat-sys-label-large-size)}.dependency-error[_ngcontent-%COMP%]{color:var(--kip-port-color);font-weight:700}.dependency-required-ok[_ngcontent-%COMP%]{color:var(--kip-starboard-color);font-weight:700}.dependency-required-error[_ngcontent-%COMP%]{color:var(--kip-port-color);font-weight:700;text-decoration:underline}.dependency-optional-ok[_ngcontent-%COMP%]{color:var(--kip-starboard-color)}.dependency-optional-error[_ngcontent-%COMP%]{color:var(--kip-port-color)}.dependency-optional-missing-met[_ngcontent-%COMP%]{color:var(--mat-sys-outline);text-decoration:line-through}.dependency-optional-present-met[_ngcontent-%COMP%]{color:var(--mat-sys-outline)}.plugin-type-label[_ngcontent-%COMP%]{font-size:.8em;margin-left:2px;opacity:.7}.dependency-ok[_ngcontent-%COMP%]{color:var(--kip-starboard-color)}.no-text-select[_ngcontent-%COMP%]{-webkit-user-select:none;user-select:none}"]})}return n})();var cM=(n,a)=>a.selector;function uM(n,a){if(n&1&&(d(0,"mat-button-toggle",1),c(1),u()),n&2){let e=a.$implicit;R("value",e),f(),be(" ",e," ")}}function mM(n,a){if(n&1){let e=we();d(0,"widget-list-card",3),$("click",function(){let i=ne(e).$implicit,o=T();return ae(o.onSelectWidget(i))}),u()}if(n&2){let e=a.$implicit;dt("dependency-missing",!e.isDependencyValid),R("svgIcon",e.icon)("iconSize",48)("name",e.name)("description",e.description)("pluginDependencyValid",e.isDependencyValid)("pluginsStatus",e.pluginsStatus)}}var Lf=(()=>{class n{_dialogRef=A(fn);_widgets=A(Ml);_widgetsList=[];filteredWidgetsList=w([]);_widgetCategory=w("Core");isDependencyValid=w(!0);ngOnInit(){this.loadWidgets()}loadWidgets(){return Le(this,null,function*(){this._widgetsList=yield this._widgets.getKipWidgetsWithStatus(),this.filteredWidgetsList.set(this._widgetsList.filter(e=>e.category===this._widgetCategory()))})}onCategoryChange(e){this.filteredWidgetsList.set(this._widgetsList.filter(t=>t.category===e.value)),this._widgetCategory.set(e.value)}onSelectWidget(e){if(!e.isDependencyValid)return;let{name:t,description:i,icon:o,minWidth:r,minHeight:s,defaultWidth:l,defaultHeight:m,category:h,requiredPlugins:v,anyOfPlugins:y,selector:C,componentClassName:S}=e,_=ge(Z({name:t,description:i,icon:o,minWidth:r,minHeight:s,defaultWidth:l,defaultHeight:m,category:h,requiredPlugins:v},y?{anyOfPlugins:y}:{}),{selector:C,componentClassName:S});this._dialogRef.close(_)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widgets-list"]],decls:7,vars:1,consts:[["name","widgetCategories","aria-label","Widget categories",1,"list-filter",3,"change","value"],[3,"value"],[3,"dependency-missing","svgIcon","iconSize","name","description","pluginDependencyValid","pluginsStatus"],[3,"click","svgIcon","iconSize","name","description","pluginDependencyValid","pluginsStatus"]],template:function(t,i){t&1&&(d(0,"div")(1,"mat-button-toggle-group",0),$("change",function(r){return i.onCategoryChange(r)}),ye(2,uM,2,2,"mat-button-toggle",1,Re),u(),d(4,"div"),ye(5,mM,1,8,"widget-list-card",2,cM),u()()),t&2&&(f(),R("value",i._widgetCategory()),f(),Ae(i._widgets.categories),f(3),Ae(i.filteredWidgetsList()))},dependencies:[Rs,ur,To,Vf],styles:[".list-filter[_ngcontent-%COMP%]{margin-bottom:20px}.dependency-missing[_ngcontent-%COMP%]{pointer-events:none;opacity:.8;background-color:var(--mat-sys-neutral10)}"]})}return n})();var Wf=(()=>{class n{dialogRef=A(fn);upgradeSvc=A(lm);upgrade(){this.upgradeSvc.runUpgrade(void 0)}startFresh(){this.upgradeSvc.startFresh(),this.dialogRef.close()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["upgrade-config"]],decls:193,vars:0,consts:[[1,"warning"],[1,"nav-table"],[2,"font-size","x-large"],["href","https://discord.gg/AMDYT2DQga","target","_blank"],[1,"button-group"],["mat-flat-button","",3,"click"],["mat-flat-button","",2,"margin-left","20px",3,"click"]],template:function(t,i){t&1&&(d(0,"h2"),c(1,"All New Touch, Mouse, and Keyboard Navigation"),u(),d(2,"p",0)(3,"strong"),c(4,"Heads up:"),u(),c(5," The new version introduces a completely redesigned fullscreen interface with no navigation bar. Please review the input modes table below to get an understanding of the new ways to operate KIP before upgrading. After the upgrade, give yourself time to get comfortable with the changes."),u(),d(6,"table",1)(7,"thead")(8,"tr")(9,"th"),c(10,"Actions"),u(),d(11,"th"),c(12,"Touch"),u(),d(13,"th"),c(14,"Mouse"),u(),d(15,"th"),c(16,"Keyboard Shortcuts"),u()()(),d(17,"tbody")(18,"tr")(19,"td"),c(20,"Open Actions menu"),u(),d(21,"td"),c(22,"Swipe left"),u(),d(23,"td"),c(24,"Click, drag left, and release"),u(),d(25,"td")(26,"kbd"),c(27,"Shift"),u(),c(28," + "),d(29,"kbd"),c(30,"Ctrl"),u(),c(31," + "),d(32,"kbd",2),c(33,"\u2190"),u(),c(34," (Left Arrow)"),u()(),d(35,"tr")(36,"td"),c(37,"Open Notification menu"),u(),d(38,"td"),c(39,"Swipe right"),u(),d(40,"td"),c(41,"Click, drag right, and release"),u(),d(42,"td")(43,"kbd"),c(44,"Shift"),u(),c(45," + "),d(46,"kbd"),c(47,"Ctrl"),u(),c(48," + "),d(49,"kbd",2),c(50,"\u2192"),u(),c(51," (Right Arrow)"),u()(),d(52,"tr")(53,"td"),c(54,"Cycle through dashboards"),u(),d(55,"td"),c(56,"Swipe up/down"),u(),d(57,"td"),c(58,"Click, drag up/down, and release"),u(),d(59,"td")(60,"kbd"),c(61,"Shift"),u(),c(62," + "),d(63,"kbd"),c(64,"Ctrl"),u(),c(65," + "),d(66,"kbd",2),c(67,"\u2191"),u(),c(68,"/"),d(69,"kbd",2),c(70,"\u2193"),u(),c(71," (Up/Down Arrow)"),u()(),d(72,"tr")(73,"td"),c(74,"Toggle Fullscreen"),u(),d(75,"td"),c(76,"N/A"),u(),d(77,"td"),c(78,"N/A"),u(),d(79,"td")(80,"kbd"),c(81,"Shift"),u(),c(82," + "),d(83,"kbd"),c(84,"Ctrl"),u(),c(85," + "),d(86,"kbd"),c(87,"F"),u()()(),d(88,"tr")(89,"td"),c(90,"Toggle Night mode"),u(),d(91,"td"),c(92,"N/A"),u(),d(93,"td"),c(94,"N/A"),u(),d(95,"td")(96,"kbd"),c(97,"Shift"),u(),c(98," + "),d(99,"kbd"),c(100,"Ctrl"),u(),c(101," + "),d(102,"kbd"),c(103,"N"),u()()(),d(104,"tr")(105,"td"),c(106,"Toggle dashboard edit mode"),u(),d(107,"td"),c(108,"N/A"),u(),d(109,"td"),c(110,"N/A"),u(),d(111,"td")(112,"kbd"),c(113,"Shift"),u(),c(114," + "),d(115,"kbd"),c(116,"Ctrl"),u(),c(117," + "),d(118,"kbd"),c(119,"E"),u()()()()(),d(120,"i"),c(121,"Note that the words Touch and Tap are synonymous with mouse click."),u(),O(122,"br")(123,"br"),d(124,"h2"),c(125,"Migration Limitations"),u(),d(126,"p")(127,"span",0),c(128,"Important:"),u(),c(129," The new widget layout engine is "),d(130,"strong"),c(131,"completely different"),u(),c(132," from the previous version. When you upgrade, your configuration will be migrated, but "),d(133,"strong"),c(134,"the way dashboards and widgets are arranged will change significantly"),u(),c(135,`.
48
+ `),u(),d(136,"ul")(137,"li"),c(138,"All KIP configuration settings will be migrated."),u(),d(139,"li"),c(140,"Each v2 Page layout will become a v3 Dashboard."),u(),d(141,"li"),c(142,"All widgets and their settings will appear in their new dashboards."),u(),d(143,"li")(144,"span",0)(145,"strong"),c(146,"Note:"),u(),c(147," Widget positions, order, and sizes "),d(148,"strong"),c(149,"WILL BE LOST"),u(),c(150,". After upgrading, dashboards will contain small widgets that you must reposition and resize manually."),u()()(),d(151,"p"),c(152,"To upgrade your configuration, follow these steps:"),u(),d(153,"ol")(154,"li"),c(155," As a safety measure, if you are using Signal K authentication, manually back up your configuration. Make a copy of the "),d(156,"code"),c(157,"9.0.0.json"),u(),c(158," files found on the Signal K server in the following folders: "),d(159,"ul")(160,"li")(161,"code"),c(162,"~/.signalk/applicationData/users/(username)/kip/"),u()(),d(163,"li")(164,"code"),c(165,"~/.signalk/applicationData/global/kip/"),u()()()(),d(166,"li"),c(167,"Click the "),d(168,"strong"),c(169,"Upgrade"),u(),c(170," button below."),u(),d(171,"li"),c(172,"Once the upgrade is complete, KIP will restart and display the migrated dashboards."),u(),d(173,"li"),c(174,"Reposition and resize your widgets as needed."),u(),d(175,"li"),c(176,"Once satisfied, delete the "),d(177,"code"),c(178,"9.0.0.json"),u(),c(179," configuration files located in the previously mentioned folders. They are not needed any more."),u()(),d(180,"p"),c(181," For tips and guidance, consult KIP\u2019s in-app "),d(182,"strong"),c(183,"Help"),u(),c(184," section. Most common questions are answered there. If you need support, join the "),d(185,"a",3),c(186,"Signal K #kip Discord channel"),u(),c(187,`.
49
+ `),u(),d(188,"div",4)(189,"button",5),$("click",function(){return i.upgrade()}),c(190,"Upgrade"),u(),d(191,"button",6),$("click",function(){return i.startFresh()}),c(192,"Start Fresh"),u()())},dependencies:[Qt,et,vt],styles:[".button-group[_ngcontent-%COMP%]{display:flex;justify-content:center}.nav-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;margin-bottom:2em}.nav-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .nav-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border:1px solid #bbb;padding:.5em 1em;text-align:center}.nav-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{background:#ddd;color:#222;font-weight:700}.nav-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(2n){background:#242424}.warning[_ngcontent-%COMP%]{color:#b71c1c}.button-group[_ngcontent-%COMP%]{margin-top:2em;display:flex;gap:20px}"]})}return n})();var hM=(n,a)=>a.id;function pM(n,a){if(n&1){let e=we();d(0,"div",2),$("click",function(){let i=ne(e).$implicit,o=T();return ae(o.selectIcon(i.id))})("keydown.enter",function(){let i=ne(e).$implicit,o=T();return ae(o.selectIcon(i.id))})("keydown.space",function(i){let o=ne(e).$implicit;return T().selectIcon(o.id),ae(i.preventDefault())}),d(1,"div",3),O(2,"mat-icon",4),u()()}if(n&2){let e=a.$implicit,t=T();dt("selected",t.selected()===e.id),ie("aria-label","Select "+e.id+" icon"),f(2),Te("width",64,"px")("height",64,"px"),R("svgIcon",e.id)}}var Ff=(()=>{class n{iconFile=x("assets/svg/icons.svg");currentIcon=x(void 0);selectedIcon=ft();icons=w([]);selected=w("");constructor(){this.loadIcons(),W(()=>{let e=this.currentIcon();z(()=>{e&&this.selected()!==e&&this.selected.set(e)})})}loadIcons(){return Le(this,null,function*(){try{let t=yield(yield fetch(this.iconFile())).text(),r=new DOMParser().parseFromString(t,"image/svg+xml").querySelector("defs");if(!r)return;let s=r.querySelectorAll("svg"),l=[];s.forEach(h=>{let v=h.getAttribute("id");v&&v.startsWith("dashboard-")&&l.push({id:v})}),this.icons.set(l);let m=this.currentIcon();m&&this.selected.set(m)}catch(e){console.error("Error loading icons:",e)}})}selectIcon(e){this.selected.set(e),this.selectedIcon.emit(e)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["select-icon"]],inputs:{iconFile:[1,"iconFile"],currentIcon:[1,"currentIcon"]},outputs:{selectedIcon:"selectedIcon"},decls:3,vars:0,consts:[[1,"icon-grid"],["tabindex","0",1,"icon-item",3,"selected"],["tabindex","0",1,"icon-item",3,"click","keydown.enter","keydown.space"],[1,"icon-container"],["aria-hidden","false",3,"svgIcon"]],template:function(t,i){t&1&&(d(0,"div",0),ye(1,pM,3,8,"div",1,hM),u()),t&2&&(f(),Ae(i.icons()))},dependencies:[Xe,je],styles:[".icon-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:16px;padding:16px;max-height:400px;overflow-y:auto}.icon-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;padding:8px;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:border-color .2s ease;background-color:var(--mat-sys-surface-container-low)}.icon-item[_ngcontent-%COMP%]:hover{outline:2px solid var(--mat-sys-on-primary-container);outline-offset:2px}.icon-item.selected[_ngcontent-%COMP%]{outline:2px solid var(--mat-sys-on-primary-container);outline-offset:2px;background-color:var(--mat-sys-primary-container)}.icon-item[_ngcontent-%COMP%]:focus{outline:2px solid var(--mat-sys-on-primary-container);outline-offset:2px}.icon-container[_ngcontent-%COMP%]{width:64px;height:64px;display:flex;align-items:center;justify-content:center;overflow:hidden}.icon-container[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{width:100%;height:100%;fill:currentColor}"]})}return n})();function gM(n,a){if(n&1&&(d(0,"button",15),c(1),u()),n&2){let e=T(),t=Lt(1);R("disabled",!t.valid),f(),Q(e.data.confirmBtnText)}}var Bf=(()=>{class n{dialogRef=A(fn);data=A(pi);_settings=A(Ht);isSplitShellEnabled=w(!0);constructor(){this.data.icon||(this.data.icon="dashboard-dashboard"),this.isSplitShellEnabled.set(this._settings.getSplitShellEnabled())}save(){this.dialogRef.close(this.data)}onIconSelected(e){this.data.icon=e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["dialog-dashboard-page-editor"]],decls:27,vars:10,consts:[["name","ngForm"],["name","name",3,"ngSubmit"],[1,"dialogue-header"],["mat-dialog-title",""],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],[1,"field-wrapper","field-margin"],[1,"field-flex"],["matInput","","type","text","id","name","placeholder","Name","name","name","required","","cdkFocusInitial","",3,"ngModelChange","ngModel"],["placeholder","collapseSplitShell","name","collapseSplitShell",1,"field-flex",3,"ngModelChange","ngModel","disabled"],[1,"field-margin","icon-section"],[2,"font-size","1.2em"],[1,"icon-selector"],[3,"selectedIcon","iconFile","currentIcon"],["align","end"],["mat-flat-button","",3,"mat-dialog-close"],["mat-flat-button","","type","submit",3,"disabled"]],template:function(t,i){if(t&1){let o=we();d(0,"form",1,0),$("ngSubmit",function(){return i.save()}),d(2,"div",2)(3,"h5",3),c(4),u(),d(5,"button",4)(6,"mat-icon"),c(7,"close"),u()()(),d(8,"mat-dialog-content")(9,"div",5)(10,"mat-form-field",6)(11,"mat-label"),c(12,"Display Name"),u(),d(13,"input",7),kn("ngModelChange",function(s){return ne(o),Tn(i.data.name,s)||(i.data.name=s),ae(s)}),u(),d(14,"mat-error"),c(15," A name is required "),u()(),d(16,"mat-checkbox",8),kn("ngModelChange",function(s){return ne(o),Tn(i.data.collapseSplitShell,s)||(i.data.collapseSplitShell=s),ae(s)}),c(17," Auto-collapse Freeboard-SK panel when displaying this dashboard. "),u()(),d(18,"div",9)(19,"span",10),c(20,"Icon Gallery"),u(),d(21,"div",11)(22,"select-icon",12),$("selectedIcon",function(s){return i.onIconSelected(s)}),u()()()(),d(23,"mat-dialog-actions",13)(24,"button",14),c(25),u(),I(26,gM,2,2,"button",15),u()()}t&2&&(f(4),Q(i.data.title),f(),R("mat-dialog-close",!1),f(8),Mn("ngModel",i.data.name),f(3),Mn("ngModel",i.data.collapseSplitShell),R("disabled",!i.isSplitShellEnabled()),f(6),R("iconFile","assets/svg/icons.svg")("currentIcon",i.data.icon),f(2),R("mat-dialog-close",!1),f(),Q(i.data.cancelBtnText),f(),P(i.data.confirmBtnText?26:-1))},dependencies:[Qt,Pi,Ri,Kn,Ni,Xe,je,qt,Ct,At,Qn,$t,xt,et,vt,_t,Ot,ro,bt,ot,Mt,Pt,Xn,hs,Ff,fi,ei],styles:[".dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}.mat-mdc-dialog-content[_ngcontent-%COMP%]{max-height:max-content}.field-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;align-content:center}.field-margin[_ngcontent-%COMP%]{margin-left:15px;margin-bottom:15px}.field-flex[_ngcontent-%COMP%]{flex:auto}.icon-selector[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline);border-radius:4px}.icon-section[_ngcontent-%COMP%] .mat-label[_ngcontent-%COMP%]{display:block;margin-bottom:8px;color:var(--mat-sys-on-surface);font-size:14px;font-weight:400}"]})}return n})();function tc(n){return n.expansionMode==="bms-battery-tree"||n.expansionMode==="solar-tree"||n.expansionMode==="charger-tree"||n.expansionMode==="inverter-tree"||n.expansionMode==="alternator-tree"||n.expansionMode==="ac-tree"}function fH(n){return n.enabled}var Go={"widget-bms":{expansionMode:"bms-battery-tree",metricOrder:["soc","current"],metrics:{soc:{metric:"soc",axisId:"ySoc",pathSuffixes:[".capacity.stateOfCharge",".stateOfCharge"],transform:n=>n*100},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:n=>n}},axes:{ySoc:{axisId:"ySoc",position:"left",title:"SoC (%)",tickSuffix:"%",min:0,max:100},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:!1}},pathRules:[{metric:"soc",axisId:"ySoc",regex:/^electrical\.batteries\.([^.]+)\.(?:capacity\.)?stateOfCharge$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.batteries\.([^.]+)\.current$/i}]},"widget-solar-charger":{expansionMode:"solar-tree",metricOrder:["panelPower","current"],metrics:{panelPower:{metric:"panelPower",axisId:"yPower",pathSuffixes:[".panelPower"],transform:n=>n/1e3},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:n=>n}},axes:{yPower:{axisId:"yPower",position:"left",title:"Power (kW)",tickSuffix:"kW"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:!1}},pathRules:[{metric:"current",axisId:"yCurrent",regex:/^electrical\.solar\.([^.]+)\.current$/i},{metric:"panelPower",axisId:"yPower",regex:/^electrical\.solar\.([^.]+)\.panelPower$/i}]},"widget-charger":{expansionMode:"charger-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:n=>n},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:n=>n}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:!1}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.chargers\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.chargers\.([^.]+)\.current$/i}]},"widget-inverter":{expansionMode:"inverter-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:n=>n},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:n=>n}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:!1}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.inverters\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.inverters\.([^.]+)\.current$/i}]},"widget-alternator":{expansionMode:"alternator-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:n=>n},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:n=>n}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:!1}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.alternators\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.alternators\.([^.]+)\.current$/i}]},"widget-ac":{expansionMode:"ac-tree",metricOrder:["voltage","current","frequency"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".line1.voltage",".line2.voltage",".line3.voltage"],transform:n=>n},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".line1.current",".line2.current",".line3.current"],transform:n=>n},frequency:{metric:"frequency",axisId:"yFrequency",pathSuffixes:[".line1.frequency",".line2.frequency",".line3.frequency"],transform:n=>n}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:!1},yFrequency:{axisId:"yFrequency",position:"left",title:"Frequency (Hz)",tickSuffix:"Hz",drawOnChartArea:!1}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.ac\.([^.]+)\.line[123]\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.ac\.([^.]+)\.line[123]\.current$/i},{metric:"frequency",axisId:"yFrequency",regex:/^electrical\.ac\.([^.]+)\.line[123]\.frequency$/i}]}},fM={"bms-battery-tree":"widget-bms","solar-tree":"widget-solar-charger","charger-tree":"widget-charger","inverter-tree":"widget-inverter","alternator-tree":"widget-alternator","ac-tree":"widget-ac"};function vM(n){return!!n&&n in Go}function Rr(n){return Go[n]}function ic(n){let a=fM[n],e=Go[a],t=[];return e.metricOrder.forEach(i=>{let o=e.metrics[i];o&&o.pathSuffixes.forEach(r=>{t.includes(r)||t.push(r)})}),t}function Gf(n,a){let e=Go[n.widgetType].metrics[n.metric];return e?e.transform(a):a}function nc(n){let a=Go[n],e=[];return a.metricOrder.forEach(t=>{let i=a.metrics[t]?.axisId;!i||e.includes(i)||e.push(i)}),e.map(t=>a.axes[t]).filter(t=>!!t)}function zf(n,a){if(!vM(n))return null;let e=nc(n),t=new Set(e.map(o=>o.axisId));return t.size===0?null:a.some(o=>!!o&&t.has(o))?n:null}function Uf(n){for(let[a,e]of Object.entries(Go))for(let t of e.pathRules){let i=t.regex.exec(n);if(i)return{widgetType:a,entityId:i[1],metric:t.metric,axisId:t.axisId}}return null}var bM=["historyCanvas"];function yM(n,a){n&1&&(d(0,"p",12),c(1,"Loading historical data\u2026"),u())}function AM(n,a){if(n&1&&(d(0,"p",13),c(1),u()),n&2){let e=T();f(),be("503: ",e.error())}}function CM(n,a){n&1&&(d(0,"p",12),c(1,"No historical data is available for this widget. If you are not using the built-in KIP History API provider, validate your plugin configuration supports the widget's path and try again."),u())}function xM(n,a){n&1&&(d(0,"div",14),O(1,"canvas",null,0),u())}Dt.register(ia,aa,ra,oa,An,Xu,Ku);var Hf=(()=>{class n{historyApiClient=A(xs);historyMapper=A(Ss);app=A(Fi);destroyRef=A(Ie);units=A(He);data=A(pi);chartCanvas=he("historyCanvas");theme=Ii(this.app.cssThemeColorRoles$,{requireSync:!0});loading=w(!0);error=w(null);datasetCount=w(0);selectedPeriod=ns("PT1H");hasNoData=L(()=>!this.loading()&&!this.error()&&this.datasetCount()===0);chart=null;viewReady=!1;pendingDatasets=[];dualAxisDescriptorCache=new Map;constructor(){W(()=>{let e=this.chartCanvas(),t=this.loading(),i=this.datasetCount();!e||t||i<=0||z(()=>{this.tryRenderChart()})})}loadHistoryDatasets(){return Le(this,null,function*(){this.loading.set(!0),this.error.set(null),this.dualAxisDescriptorCache.clear();try{let e=yield this.resolveQueryableSeriesDefinitions(),t=yield Promise.all(e.map((i,o)=>this.buildDatasetForSeries(i,o)));this.pendingDatasets=t.filter(i=>!!i),this.datasetCount.set(this.pendingDatasets.length),this.tryRenderChart()}catch(e){console.error("[WidgetHistoryChartDialogComponent] Failed to load widget history datasets:",e),this.error.set("Unable to load historical data for this widget."),this.pendingDatasets=[],this.datasetCount.set(0)}finally{this.loading.set(!1),queueMicrotask(()=>{this.tryRenderChart()})}})}ngOnInit(){this.loadHistoryDatasets(),this.destroyRef.onDestroy(()=>{this.chart?.destroy(),this.chart=null})}ngAfterViewInit(){this.onCanvasReady()}ngOnDestroy(){this.chart?.destroy(),this.chart=null}onCanvasReady(){this.viewReady=!0,this.tryRenderChart()}buildDatasetForSeries(e,t){return Le(this,null,function*(){let i=e.path;if(!i)return null;let o=this.resolveDuration(e),r=this.resolveResolutionSeconds(o),s=this.buildHistoryRequestCandidates(i,e.context),l=this.describeDualAxisSeries(i),m=[],h=this.normalizeHistoryPath(i),v=this.resolveConvertUnitTo(i);for(let S of s){let _=yield this.historyApiClient.getValues({paths:S.paths,context:S.context,duration:o,resolution:r});if(!_?.data?.length)continue;if(m=this.historyMapper.mapValuesToChartDatapoints(_,{unit:"number",domain:"scalar"}).map(E=>{let N=E.data.value;return typeof N=="number"&&Number.isFinite(N)&&(l?N=Gf(l,N):v&&(N=this.units.convertToUnit(v,N))),{x:E.timestamp,y:N}}),m.length){h=S.labelPath;break}}if(!m.length)return null;let y=this.resolveSeriesColor(t,l),C=e.source?` (${e.source})`:"";return{label:`${h}${C}`,data:m,borderColor:y,backgroundColor:y,pointRadius:0,borderWidth:2,tension:.25,yAxisID:l?.axisId??"y",borderDash:this.isDualAxisDashedSeries(l)?[6,4]:void 0,fill:!1}})}describeDualAxisSeries(e){let t=this.normalizeHistoryPath(e??"");if(!t.length)return null;if(this.dualAxisDescriptorCache.has(t))return this.dualAxisDescriptorCache.get(t)??null;let i=Uf(t);return this.dualAxisDescriptorCache.set(t,i),i}resolveSeriesColor(e,t){let i=this.getSeriesPalette();return t?this.getDualAxisMetricColor(t.widgetType,t.metric):i[e%i.length]}getSeriesPalette(){let e=this.data.widget?.config?.color||"blue",t=this.resolveThemeColor(e),i=[this.theme().green,this.theme().orange,this.theme().pink,this.theme().purple,this.theme().yellow,this.theme().grey,this.theme().blue,this.theme().contrast],o=i.findIndex(r=>r?.toLowerCase()===t.toLowerCase());return o!==-1?i=[i[o],...i.slice(0,o),...i.slice(o+1)]:i=[t,...i],i}resolveThemeColor(e){let t=this.theme()[e];return typeof t=="string"&&t.length>0?t:e}isDualAxisDashedSeries(e){return e?this.getDualAxisEntityOrderIndex(e.entityId,e.widgetType)%2===1:!1}getDualAxisEntityOrderIndex(e,t){let i=[];this.data.seriesDefinitions.forEach(r=>{let s=this.describeDualAxisSeries(r.path);!s||s.widgetType!==t||i.includes(s.entityId)||i.push(s.entityId)});let o=i.indexOf(e);return o>=0?o:0}getDualAxisMetricColor(e,t){let i=this.getSeriesPalette(),r=Rr(e).metricOrder.indexOf(t),s=r>=0?r:0;return i[s%i.length]}buildHistoryRequestCandidates(e,t){let i=this.normalizeHistoryPath(e),o=this.resolveHistoryContext(e,t),r=[i].filter(l=>l.length>0),s=[];return r.forEach(l=>{s.push({paths:`${l}:avg`,context:o,labelPath:this.normalizeHistoryPath(l)})}),s}resolveQueryableSeriesDefinitions(){return Le(this,null,function*(){let e=[];for(let t of this.data.seriesDefinitions){let i=yield this.expandTemplateSeries(t);e.push(...i)}return this.sortExpandedSeries(e)})}sortExpandedSeries(e){return e.some(i=>this.describeDualAxisSeries(i.path)!==null)?[...e].sort((i,o)=>{let r=this.describeDualAxisSeries(i.path),s=this.describeDualAxisSeries(o.path);if(!r&&!s)return 0;if(!r)return 1;if(!s)return-1;if(r.entityId!==s.entityId)return r.entityId.localeCompare(s.entityId);let l=Rr(r.widgetType).metricOrder.indexOf(r.metric),m=Rr(s.widgetType).metricOrder.indexOf(s.metric);return l-m}):e}expandTemplateSeries(e){return Le(this,null,function*(){let t=this.normalizeHistoryPath(e.path??""),i=t.endsWith(".*");if(!tc(e)&&!i)return[e];let o=t.replace(/\.\*$/,"");if(!o.length)return[e];let r=this.resolveDuration(e),s=yield this.historyApiClient.getPaths({duration:r});if(!s?.length)return[e];let l=this.findConcreteTemplatePaths(e,o,s);return l.length===0?[e]:l.map((m,h)=>ge(Z({},e),{seriesId:`${e.seriesId}:resolved:${h}`,datasetUuid:`${e.datasetUuid}:resolved:${h}`,path:m,expansionMode:null,familyKey:null,allowedIds:null}))})}findConcreteTemplatePaths(e,t,i){let o=Array.from(new Set(i.map(s=>this.normalizeHistoryPath(s)).filter(s=>s.startsWith(`${t}.`))));return o.length===0?[]:tc(e)?o.filter(s=>this.matchesTemplateMetric(s,t,e)).filter(s=>this.matchesTemplateAllowedIds(s,t,e)):o}matchesTemplateMetric(e,t,i){let o=e.slice(t.length+1);return ic(i.expansionMode).some(s=>o.endsWith(s))}matchesTemplateAllowedIds(e,t,i){let o=Array.isArray(i.allowedIds)?i.allowedIds.map(s=>String(s).trim()).filter(s=>s.length>0):[];if(o.length===0)return!0;let r=this.extractEntityId(e,t,i);return!!r&&o.includes(r)}extractEntityId(e,t,i){let o=e.slice(t.length+1);if(!o.length)return null;let s=ic(i.expansionMode).find(m=>o.endsWith(m));if(!s)return null;let l=o.slice(0,-s.length).replace(/\.$/,"").trim();return l.length?l:null}normalizeHistoryPath(e){let t=e.trim();return t.length?t.replace(/^(vessels\.)?self\./,""):""}resolveHistoryContext(e,t){let i=this.normalizeContext(t);if(i)return i;if(/^(vessels\.)?self\./.test(e))return"vessels.self"}tryRenderChart(){if(!this.viewReady)return;if(!this.pendingDatasets.length){this.chart?.destroy(),this.chart=null;return}let e=this.chartCanvas();if(!e)return;this.chart?.destroy();let t=this.getPrimaryAxisUnitLabel(),i={type:"line",data:{datasets:this.pendingDatasets},options:{responsive:!0,maintainAspectRatio:!1,parsing:!1,interaction:{mode:"nearest",intersect:!1,axis:"x"},scales:Z({x:{type:"time",time:{tooltipFormat:"PPpp",displayFormats:{second:"HH:mm:ss",minute:"HH:mm",hour:"HH:mm",day:"MMM d",week:"MMM d",month:"MMM yyyy"},unit:"minute",minUnit:"second"},ticks:{color:this.theme().contrastDim},grid:{color:this.theme().contrastDimmer}}},this.buildYScales(t)),plugins:{legend:{labels:{color:this.theme().contrastDim,generateLabels:o=>this.buildLegendLabels(o)}},tooltip:{boxWidth:15,boxHeight:15,bodyFont:{size:14},multiKeyBackground:"rgba(0, 0, 0, 0)",callbacks:{labelColor:o=>{let r=this.getLegendItemForDataset(o.chart,o.datasetIndex),s=Array.isArray(r?.lineDash)&&r.lineDash.length>=2?[r.lineDash[0],r.lineDash[1]]:void 0;return{borderColor:r?.strokeStyle??this.theme().contrast,backgroundColor:"rgba(0, 0, 0, 0)",borderWidth:2,borderRadius:0,borderDash:s}}}}}}};this.chart=new Dt(e.nativeElement.getContext("2d"),i)}getPrimaryAxisUnitLabel(){let e=this.resolveConvertUnitTo();return this.getUnitsLabel(e)}resolveConvertUnitTo(e){let t=this.data.widget?.config;if(!t)return null;if(t.paths&&typeof t.paths=="object"){if(e)for(let o of Object.keys(t.paths)){let r=t.paths[o];if(r?.path===e&&r.convertUnitTo)return r.convertUnitTo}let i=Object.keys(t.paths)[0];if(i&&t.paths[i]?.convertUnitTo)return t.paths[i].convertUnitTo}return t.convertUnitTo??null}buildYScales(e){let t=this.resolveDualAxisWidgetType();if(!t)return{y:{ticks:{color:this.theme().contrastDim},grid:{color:this.theme().contrastDimmer},title:{display:!!e,text:e?`${e}`:"",color:this.theme().contrastDim}}};let i=nc(t),o={};return i.forEach(r=>{let s=this.resolvePrimaryMetricForAxis(t,r.axisId),l=s?this.getDualAxisMetricColor(t,s):this.theme().contrastDim;o[r.axisId]=ge(Z(Z({type:"linear",position:r.position},r.min!=null?{min:r.min}:{}),r.max!=null?{max:r.max}:{}),{ticks:{color:this.theme().contrastDim,callback:m=>this.formatAxisTick(m,r.tickSuffix)},grid:Z({color:this.theme().contrastDimmer},r.drawOnChartArea===!1?{drawOnChartArea:!1}:{}),title:{display:!0,text:r.title,color:l}})}),o}resolvePrimaryMetricForAxis(e,t){let i=Rr(e);return i.metricOrder.find(r=>i.metrics[r]?.axisId===t)??null}formatAxisTick(e,t){return t==="%"?`${e}%`:`${e} ${t}`}buildLegendLabels(e){return Dt.defaults.plugins.legend.labels.generateLabels(e).map(t=>{let i=t.datasetIndex!=null?e.data.datasets[t.datasetIndex]:null,o=Array.isArray(i?.borderDash)?i.borderDash:[];return ge(Z({},t),{fillStyle:"transparent",lineDash:o})})}getLegendItemForDataset(e,t){return this.buildLegendLabels(e).find(i=>i.datasetIndex===t)??null}resolveDualAxisWidgetType(){return zf(this.data.widget?.type,this.pendingDatasets.map(e=>typeof e.yAxisID=="string"?e.yAxisID:null))}setPeriod(e){this.selectedPeriod.set(e),this.loadHistoryDatasets()}resolveDuration(e){return e.timeScale&&e.period&&Number.isFinite(e.period)?this.durationFromScaleAndPeriod(e.timeScale,e.period):this.selectedPeriod()}durationFromScaleAndPeriod(e,t){let i=Math.max(1,Math.round(t)),o=e.trim().toLowerCase(),r=o.match(/^last\s+(\d+)\s+([a-z]+)/i);if(r){let s=Number(r[1]),l=r[2];if(Number.isFinite(s)&&s>0)return this.durationFromToken(l,s)}return this.durationFromToken(o,i)}durationFromToken(e,t){let i=e.toLowerCase();return i.startsWith("second")?`PT${t}S`:i.startsWith("minute")?`PT${t}M`:i.startsWith("hour")?`PT${t}H`:i.startsWith("day")?`P${t}D`:i.startsWith("week")?`P${t*7}D`:i.startsWith("month")?`P${t}M`:"PT24H"}resolveResolutionSeconds(e){let t=this.parseDurationToSeconds(e);return!Number.isFinite(t)||t<=0?1:Math.max(1,Math.round(t/120))}parseDurationToSeconds(e){let i=/^P(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?$/i.exec(e.trim());if(!i)return NaN;let o=Number(i[1]??0),r=Number(i[2]??0),s=Number(i[3]??0),l=Number(i[4]??0);return o*86400+r*3600+s*60+l}normalizeContext(e){let t=typeof e=="string"?e.trim():"";return t.length?t:void 0}getUnitsLabel(e){if(!e)return"";switch(e){case"percent":case"percentraw":return"%";case"latitudeMin":return"latitude in minutes";case"latitudeSec":return"latitude in secondes";case"longitudeMin":return"longitude in minutes";case"longitudeSec":return"longitude in secondes";default:return e}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["widget-history-chart-dialog"]],viewQuery:function(t,i){t&1&&_e(i.chartCanvas,bM,5),t&2&&Me()},inputs:{selectedPeriod:[1,"selectedPeriod"]},outputs:{selectedPeriod:"selectedPeriodChange"},decls:22,vars:4,consts:[["historyCanvas",""],[1,"dialogue-header"],["mat-dialog-title",""],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],[1,"history-dialog-content"],[1,"time-select"],["hideSingleSelectionIndicator","true","aria-label","Chart Time Span Selection",3,"ngModelChange","ngModel"],["value","PT15M",3,"click"],["value","PT1H",3,"click"],["value","PT8H",3,"click"],["value","PT24H",3,"click"],[1,"chart-area"],[1,"history-message"],[1,"history-message","error"],[1,"chart-wrapper"]],template:function(t,i){t&1&&(d(0,"div",1)(1,"h5",2),c(2),u(),d(3,"button",3)(4,"mat-icon"),c(5,"close"),u()()(),d(6,"mat-dialog-content",4)(7,"div",5)(8,"mat-button-toggle-group",6),kn("ngModelChange",function(r){return Tn(i.selectedPeriod,r)||(i.selectedPeriod=r),r}),d(9,"mat-button-toggle",7),$("click",function(){return i.setPeriod("PT15M")}),c(10,"15 Minutes"),u(),d(11,"mat-button-toggle",8),$("click",function(){return i.setPeriod("PT1H")}),c(12,"1 Hour"),u(),d(13,"mat-button-toggle",9),$("click",function(){return i.setPeriod("PT8H")}),c(14,"8 Hours"),u(),d(15,"mat-button-toggle",10),$("click",function(){return i.setPeriod("PT24H")}),c(16,"24 Hours"),u()()(),d(17,"div",11),I(18,yM,2,0,"p",12)(19,AM,2,1,"p",13)(20,CM,2,0,"p",12)(21,xM,3,0,"div",14),u()()),t&2&&(f(2),Q(i.data.title),f(),R("mat-dialog-close",!1),f(5),Mn("ngModel",i.selectedPeriod),f(10),P(i.loading()?18:i.error()?19:i.hasNoData()?20:21))},dependencies:[Qt,Pi,Ri,Ni,Rs,ur,To,et,_t,Xe,je,Ot,ot,Xn],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%}.dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}mat-dialog-content.history-dialog-content[_ngcontent-%COMP%]{padding:0 24px 20px;display:flex;flex-direction:column;width:100%;height:100%;min-width:70vw;min-height:55vh;justify-content:flex-start;align-items:stretch}.time-select[_ngcontent-%COMP%]{flex-grow:0;text-align:center;width:100%}.chart-area[_ngcontent-%COMP%], .chart-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;width:100%}.chart-wrapper[_ngcontent-%COMP%] canvas[_ngcontent-%COMP%]{flex:1 1 0;min-height:0}.history-message[_ngcontent-%COMP%]{margin:0;padding:1rem 0}.error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}"],changeDetection:0})}return n})();var lg=(()=>{class n{dialog=A(Mu);openFrameDialog(e,t){switch(e.component){case"select-widget":e.componentType=Lf;break;case"upgrade-config":e.componentType=Wf;break;case"ais-target":e.componentType=pl;break}return this.dialog.open(Kl,{data:e,height:t?"calc(100% - 30px)":"",width:t?"calc(100% - 30px)":"",maxWidth:t?"100%":"",maxHeight:t?"100%":""}).afterClosed()}openAisDetailDialog(e){return this.dialog.open(Kl,{panelClass:"ais-dialog-panel",data:e,height:"",width:"",maxWidth:"",maxHeight:""}).afterClosed()}openConfirmationDialog(e){return this.dialog.open(dm,{data:e,minWidth:"35vw",minHeight:"25vh"}).afterClosed()}openNameDialog(e){return this.dialog.open(cm,{data:e,minWidth:"20vw",minHeight:"20vh",disableClose:!1})}openDashboardPageEditorDialog(e){return this.dialog.open(Bf,{data:e,minWidth:"60vw",maxWidth:"90vw",maxHeight:"95vh",disableClose:!1})}openWidgetOptions(e){return this.dialog.open(Bm,{data:e.config,minWidth:"50vw",maxWidth:"90vw",closeOnNavigation:!0})}openWidgetHistoryDialog(e){return this.dialog.open(Hf,{data:e,minWidth:"70vw",maxWidth:"95vw",maxHeight:"95vh",disableClose:!1})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function SM(n,a){}var qf="_mat-bottom-sheet-enter",$f="_mat-bottom-sheet-exit",wM=(()=>{class n extends Su{_breakpointSubscription;_animationsDisabled=pn();_animationState="void";_animationStateChanged=new hi;_destroyed=!1;constructor(){super();let e=A(no);this._breakpointSubscription=e.observe([Ki.Medium,Ki.Large,Ki.XLarge]).subscribe(()=>{let t=this._elementRef.nativeElement.classList;t.toggle("mat-bottom-sheet-container-medium",e.isMatched(Ki.Medium)),t.toggle("mat-bottom-sheet-container-large",e.isMatched(Ki.Large)),t.toggle("mat-bottom-sheet-container-xlarge",e.isMatched(Ki.XLarge))})}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._animationsDisabled&&this._simulateAnimation(qf))}exit(){this._destroyed||(this._elementRef.nativeElement.setAttribute("mat-exit",""),this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._animationsDisabled&&this._simulateAnimation($f))}ngOnDestroy(){super.ngOnDestroy(),this._breakpointSubscription.unsubscribe(),this._destroyed=!0}_simulateAnimation(e){this._ngZone.run(()=>{this._handleAnimationEvent(!0,e),setTimeout(()=>this._handleAnimationEvent(!1,e))})}_trapFocus(){super._trapFocus({preventScroll:!0})}_handleAnimationEvent(e,t){let i=t===qf;(i||t===$f)&&this._animationStateChanged.emit({toState:i?"visible":"hidden",phase:e?"start":"done"})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=H({type:n,selectors:[["mat-bottom-sheet-container"]],hostAttrs:["tabindex","-1",1,"mat-bottom-sheet-container"],hostVars:9,hostBindings:function(t,i){t&1&&$("animationstart",function(r){return i._handleAnimationEvent(!0,r.animationName)})("animationend",function(r){return i._handleAnimationEvent(!1,r.animationName)})("animationcancel",function(r){return i._handleAnimationEvent(!1,r.animationName)}),t&2&&(ie("role",i._config.role)("aria-modal",i._config.ariaModal)("aria-label",i._config.ariaLabel),dt("mat-bottom-sheet-container-animations-enabled",!i._animationsDisabled)("mat-bottom-sheet-container-enter",i._animationState==="visible")("mat-bottom-sheet-container-exit",i._animationState==="hidden"))},features:[Qo],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(t,i){t&1&&Ai(0,SM,0,0,"ng-template",0)},dependencies:[ou],styles:[`@keyframes _mat-bottom-sheet-enter{from{transform:translateY(100%)}to{transform:none}}@keyframes _mat-bottom-sheet-exit{from{transform:none}to{transform:translateY(100%)}}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto;position:relative;background:var(--mat-bottom-sheet-container-background-color, var(--mat-sys-surface-container-low));color:var(--mat-bottom-sheet-container-text-color, var(--mat-sys-on-surface));font-family:var(--mat-bottom-sheet-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-bottom-sheet-container-text-size, var(--mat-sys-body-large-size));line-height:var(--mat-bottom-sheet-container-text-line-height, var(--mat-sys-body-large-line-height));font-weight:var(--mat-bottom-sheet-container-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-bottom-sheet-container-text-tracking, var(--mat-sys-body-large-tracking))}@media(forced-colors: active){.mat-bottom-sheet-container{outline:1px solid}}.mat-bottom-sheet-container-animations-enabled{transform:translateY(100%)}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-enter{animation:_mat-bottom-sheet-enter 195ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-exit{animation:_mat-bottom-sheet-exit 375ms cubic-bezier(0.4, 0, 1, 1) backwards}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:var(--mat-bottom-sheet-container-shape, 28px);border-top-right-radius:var(--mat-bottom-sheet-container-shape, 28px)}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}
50
+ `],encapsulation:2})}return n})(),_M=new _n("MatBottomSheetData"),ac=class{viewContainerRef;injector;panelClass;direction;data=null;hasBackdrop=!0;backdropClass;disableClose=!1;ariaLabel=null;ariaModal=!1;closeOnNavigation=!0;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;height="";minHeight;maxHeight},Rl=class{_ref;get instance(){return this._ref.componentInstance}get componentRef(){return this._ref.componentRef}containerInstance;disableClose;_afterOpened=new Zt;_result;_closeFallbackTimeout;constructor(a,e,t){this._ref=a,this.containerInstance=t,this.disableClose=e.disableClose,t._animationStateChanged.pipe(_i(i=>i.phase==="done"&&i.toState==="visible"),mi(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),t._animationStateChanged.pipe(_i(i=>i.phase==="done"&&i.toState==="hidden"),mi(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._ref.close(this._result)}),a.overlayRef.detachments().subscribe(()=>{this._ref.close(this._result)}),wi(this.backdropClick(),this.keydownEvents().pipe(_i(i=>i.keyCode===27))).subscribe(i=>{!this.disableClose&&(i.type!=="keydown"||!jn(i))&&(i.preventDefault(),this.dismiss())})}dismiss(a){this.containerInstance&&(this.containerInstance._animationStateChanged.pipe(_i(e=>e.phase==="start"),mi(1)).subscribe(()=>{this._closeFallbackTimeout=setTimeout(()=>this._ref.close(this._result),500),this._ref.overlayRef.detachBackdrop()}),this._result=a,this.containerInstance.exit(),this.containerInstance=null)}afterDismissed(){return this._ref.closed}afterOpened(){return this._afterOpened}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}},MM=new _n("mat-bottom-sheet-default-options"),TM=(()=>{class n{_injector=A(Zo);_parentBottomSheet=A(n,{optional:!0,skipSelf:!0});_animationsDisabled=pn();_defaultOptions=A(MM,{optional:!0});_bottomSheetRefAtThisLevel=null;_dialog=A(wu);get _openedBottomSheetRef(){let e=this._parentBottomSheet;return e?e._openedBottomSheetRef:this._bottomSheetRefAtThisLevel}set _openedBottomSheetRef(e){this._parentBottomSheet?this._parentBottomSheet._openedBottomSheetRef=e:this._bottomSheetRefAtThisLevel=e}constructor(){}open(e,t){let i=Z(Z({},this._defaultOptions||new ac),t),o;return this._dialog.open(e,ge(Z({},i),{disableClose:!0,closeOnOverlayDetachments:!1,maxWidth:"100%",container:wM,scrollStrategy:i.scrollStrategy||du(this._injector),positionStrategy:hu(this._injector).centerHorizontally().bottom("0"),disableAnimations:this._animationsDisabled,templateContext:()=>({bottomSheetRef:o}),providers:(r,s,l)=>(o=new Rl(r,i,l),[{provide:Rl,useValue:o},{provide:_M,useValue:i.data}])})),o.afterDismissed().subscribe(()=>{this._openedBottomSheetRef===o&&(this._openedBottomSheetRef=null)}),this._openedBottomSheetRef?(this._openedBottomSheetRef.afterDismissed().subscribe(()=>o.containerInstance?.enter()),this._openedBottomSheetRef.dismiss()):o.containerInstance.enter(),this._openedBottomSheetRef=o,o}dismiss(e){this._openedBottomSheetRef&&this._openedBottomSheetRef.dismiss(e)}ngOnDestroy(){this._bottomSheetRefAtThisLevel&&this._bottomSheetRefAtThisLevel.dismiss()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),pq=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=cn({type:n});static \u0275inj=ln({providers:[TM],imports:[_u,ru,Yn]})}return n})();var jf=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],zn=(()=>{if(typeof document>"u")return!1;let n=jf[0],a={};for(let e of jf)if(e?.[1]in document){for(let[i,o]of e.entries())a[n[i]]=o;return a}return!1})(),Yf={change:zn.fullscreenchange,error:zn.fullscreenerror},xi={request(n=document.documentElement,a){return new Promise((e,t)=>{let i=()=>{xi.off("change",i),e()};xi.on("change",i);let o=n[zn.requestFullscreen](a);o instanceof Promise&&o.then(i).catch(t)})},exit(){return new Promise((n,a)=>{if(!xi.isFullscreen){n();return}let e=()=>{xi.off("change",e),n()};xi.on("change",e);let t=document[zn.exitFullscreen]();t instanceof Promise&&t.then(e).catch(a)})},toggle(n,a){return xi.isFullscreen?xi.exit():xi.request(n,a)},onchange(n){xi.on("change",n)},onerror(n){xi.on("error",n)},on(n,a){let e=Yf[n];e&&document.addEventListener(e,a,!1)},off(n,a){let e=Yf[n];e&&document.removeEventListener(e,a,!1)},raw:zn};Object.defineProperties(xi,{isFullscreen:{get:()=>!!document[zn.fullscreenElement]},element:{enumerable:!0,get:()=>document[zn.fullscreenElement]??void 0},isEnabled:{enumerable:!0,get:()=>!!document[zn.fullscreenEnabled]}});zn||(xi={isEnabled:!1});var on=xi;var kM="data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK",DM="data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw",oc=class{constructor(){this.enabled=!1}enable(){throw new Error("NoSleep using SSR/no-op mode; do not call enable.")}disable(){throw new Error("NoSleep using SSR/no-op mode; do not call disable.")}},rc=class{constructor(){this.enabled=!1;let a=()=>this.wakeLock&&document.visibilityState==="visible"&&this.enable();document.addEventListener("visibilitychange",a),document.addEventListener("fullscreenchange",a)}enable(){return Le(this,null,function*(){try{this.wakeLock=yield navigator.wakeLock.request("screen"),this.enabled=!0,console.debug("Wake Lock active."),this.wakeLock.addEventListener("release",()=>{console.debug("Wake Lock released.")})}catch(a){this.enabled=!1,a instanceof Error&&console.error(`${a.name}, ${a.message}`)}})}disable(){this.wakeLock?.release(),this.wakeLock=void 0,this.enabled=!1}},sc=class{constructor(){this.enabled=!1,this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",kM),this._addSourceToVideo(this.noSleepVideo,"mp4",DM),Object.assign(this.noSleepVideo.style,{position:"absolute",left:"-100%",top:"-100%"}),document.querySelector("body")?.append(this.noSleepVideo),this.noSleepVideo.addEventListener("loadedmetadata",()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())})})}_addSourceToVideo(a,e,t){let i=document.createElement("source");i.src=t,i.type=`video/${e}`,a.appendChild(i)}enable(){return Le(this,null,function*(){let a=this.noSleepVideo.play();try{let e=yield a;return this.enabled=!0,e}catch(e){this.enabled=!1,e instanceof Error&&console.error(`${e.name}, ${e.message}`)}})}disable(){this.noSleepVideo.pause(),this.enabled=!1}};function EM(){if(!/iPod|iPhone|iPad/.test(navigator.userAgent))return null;let n=navigator.userAgent.match(/OS (\d+)_(\d+)/);return n&&[Number(n[1]),Number(n[2])]}function IM(n,a){return n[0]>a[0]||n[0]===a[0]&&n[1]>=a[1]}function PM(){if(!("wakeLock"in navigator))return!1;let n=EM();return n?!navigator.standalone||IM(n,[18,4]):!0}var Kf=typeof navigator>"u"?oc:PM()?rc:sc;var wq=(()=>{class n{isDragging=w(!1);fullscreenStatus=w(!1);fullscreenSupported=w(!0);noSleepStatus=w(!1);noSleepSupported=w(!0);noSleep=null;initialTouchX=null;initialTouchY=null;hotkeyListeners=new Map;boundPreventGestures=null;fullscreenChangeHandler=()=>{if(this.fullscreenStatus.set(on.isFullscreen),!on.isFullscreen&&this.noSleep&&this.noSleepStatus()){try{this.noSleep.disable()}catch(e){}this.noSleepStatus.set(!1)}};constructor(){window.__KIP_TEST__?(this.fullscreenSupported.set(!1),this.noSleepSupported.set(!1)):(on.isEnabled?on.on("change",this.fullscreenChangeHandler):(this.fullscreenSupported.set(!1),console.log("[UI Event Service] Fullscreen mode is not supported by device/browser.")),this.checkNoSleepSupport(),this.checkPwaMode()&&this.noSleepSupported()&&!this.noSleepStatus()&&this.toggleNoSleep())}checkNoSleepSupport(){try{if(this.noSleep||(this.noSleep=new Kf),!this.noSleep||typeof this.noSleep.enable!="function"||typeof this.noSleep.disable!="function")throw new Error("[UI Event Service] NoSleep methods not available")}catch(e){this.noSleepSupported.set(!1),console.warn(`[UI Event Service] NoSleep is not supported by this device/browser. Error: ${e}`),this.noSleep=null}}checkPwaMode(){let e=window.matchMedia("(display-mode: standalone)").matches||window.navigator.standalone!==void 0;return console.log("[UI Event Service] PWA mode:",e),e}toggleNoSleep(){if(this.noSleepSupported()){if(this.noSleepStatus())try{this.noSleep?.disable()}catch(e){}else{this.noSleep||this.checkNoSleepSupport();try{this.noSleep?.enable()}catch(e){console.warn("[UI Event Service] Failed to enable NoSleep:",e)}}this.noSleepStatus.set(!this.noSleepStatus()),console.log("[UI Event Service] NoSleep active:",this.noSleepStatus())}}toggleFullScreen(){if(on.isEnabled){if(this.fullscreenStatus()){if(on.isFullscreen&&on.exit(),this.noSleepStatus()){try{this.noSleep?.disable()}catch(e){}this.noSleepStatus.set(!1)}}else if(on.request(),!this.noSleepStatus()){this.noSleep||this.checkNoSleepSupport();try{this.noSleep?.enable(),this.noSleepStatus.set(!0)}catch(e){}}this.fullscreenStatus.set(!this.fullscreenStatus())}else this.fullscreenSupported.set(!1),console.log("[UI Event Service] Fullscreen mode is not supported by this browser.")}addGestureListeners(e,t){this.boundPreventGestures||(this.boundPreventGestures=this.preventBrowserHistorySwipeGestures.bind(this)),document.addEventListener("openLeftSidenav",e),document.addEventListener("openRightSidenav",t),document.addEventListener("touchstart",this.boundPreventGestures,{passive:!1}),document.addEventListener("touchmove",this.boundPreventGestures,{passive:!1}),document.addEventListener("touchend",this.boundPreventGestures),document.addEventListener("touchcancel",this.boundPreventGestures)}removeGestureListeners(e,t){document.removeEventListener("openLeftSidenav",e),document.removeEventListener("openRightSidenav",t),this.boundPreventGestures&&(document.removeEventListener("touchstart",this.boundPreventGestures),document.removeEventListener("touchmove",this.boundPreventGestures),document.removeEventListener("touchend",this.boundPreventGestures),document.removeEventListener("touchcancel",this.boundPreventGestures))}preventBrowserHistorySwipeGestures(e){if(e instanceof TouchEvent&&e.touches.length===1){let t=e.touches[0],i=30;if(e.type==="touchstart")this.initialTouchX=t.clientX,this.initialTouchY=t.clientY;else if(e.type==="touchmove"&&this.initialTouchX!==null&&this.initialTouchY!==null){let o=Math.abs(t.clientX-this.initialTouchX),r=Math.abs(t.clientY-this.initialTouchY);o>10&&o>r&&(this.initialTouchX<i||this.initialTouchX>window.innerWidth-i)&&e.preventDefault(),r>10&&this.initialTouchY<50&&e.preventDefault()}else(e.type==="touchend"||e.type==="touchcancel")&&(this.initialTouchX=null,this.initialTouchY=null)}}addHotkeyListener(e,t){let i=o=>{if(o instanceof KeyboardEvent){let r=o.key.toLowerCase();if(t&&(t.keys&&!t.keys.includes(r)||t.ctrlKey!==void 0&&o.ctrlKey!==t.ctrlKey||t.shiftKey!==void 0&&o.shiftKey!==t.shiftKey))return;e(r,o)}else console.warn("[uiEvent Service] Non-keyboard event detected in addHotkeyListener:",o)};this.hotkeyListeners.set(e,i),document.addEventListener("keydown",i)}removeHotkeyListener(e){let t=this.hotkeyListeners.get(e);t&&(document.removeEventListener("keydown",t),this.hotkeyListeners.delete(e))}ngOnDestroy(){if(on.isEnabled)try{on.off("change",this.fullscreenChangeHandler)}catch(e){}if(this.noSleep&&this.noSleepStatus())try{this.noSleep.disable()}catch(e){}this.noSleep=null,this.boundPreventGestures&&(document.removeEventListener("touchstart",this.boundPreventGestures),document.removeEventListener("touchmove",this.boundPreventGestures),document.removeEventListener("touchend",this.boundPreventGestures),document.removeEventListener("touchcancel",this.boundPreventGestures),this.boundPreventGestures=null);for(let[,e]of this.hotkeyListeners.entries())document.removeEventListener("keydown",e);this.hotkeyListeners.clear()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=gt({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{ws as a,Tt as b,Cn as c,xe as d,Be as e,So as f,Vt as g,bi as h,am as i,rm as j,sm as k,TG as l,If as m,zi as n,Ml as o,lm as p,tc as q,fH as r,lg as s,_M as t,Rl as u,TM as v,pq as w,wq as x};