@mxtommy/kip 4.8.1 → 4.8.2

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 (59) hide show
  1. package/CHANGELOG.md +12 -3
  2. package/package.json +1 -1
  3. package/public/{chunk-CNMFlw_H.js → chunk-7lulvsGI.js} +1 -1
  4. package/public/{chunk-CIlfzV9R.js → chunk-8hkXyEzG.js} +1 -1
  5. package/public/{chunk-DWLISAZi.js → chunk-B15lj2T8.js} +1 -1
  6. package/public/{chunk-BQr-tSkv.js → chunk-B6AwCAvV.js} +1 -1
  7. package/public/{chunk-CwSa_BNV.js → chunk-B6XxnPxk.js} +1 -1
  8. package/public/{chunk-DE4ylhpq.js → chunk-B8gfh4xf.js} +1 -1
  9. package/public/{chunk-C2VQxCXa.js → chunk-B8zRhoG8.js} +1 -1
  10. package/public/{chunk-Bp0MQwPM.js → chunk-BIYHVfJl.js} +1 -1
  11. package/public/{chunk-DzTTqoF_.js → chunk-BW4m3O2L.js} +1 -1
  12. package/public/{chunk-Ii9n-oiL.js → chunk-B_PiPxb4.js} +1 -1
  13. package/public/chunk-Bb1mO304.js +1 -0
  14. package/public/{chunk-MjWuPUhu.js → chunk-BdBWqZzL.js} +1 -1
  15. package/public/{chunk-hd2_AKwt.js → chunk-BgyxBAyq.js} +1 -1
  16. package/public/{chunk-JbEkcxJm.js → chunk-Bhah8DNM.js} +1 -1
  17. package/public/{chunk-DDqeRiB0.js → chunk-Bq-eHuZV.js} +1 -1
  18. package/public/{chunk-CpuB_ZZz.js → chunk-BxV0O2fU.js} +1 -1
  19. package/public/{chunk-PheXEqie.js → chunk-Bz9bswDl.js} +1 -1
  20. package/public/{chunk-BOAD0N2a.js → chunk-C3CwUYvD.js} +1 -1
  21. package/public/{chunk-CkXTl3su.js → chunk-C4FGoLDg.js} +1 -1
  22. package/public/{chunk-sNakMDHi.js → chunk-CCiqU2uY.js} +1 -1
  23. package/public/{chunk-00hwknVI.js → chunk-CHKQxw6E.js} +1 -1
  24. package/public/{chunk-B82ADJSs.js → chunk-CJIxuzvd.js} +1 -1
  25. package/public/{chunk-DumLX5k_.js → chunk-COMZv7NY.js} +1 -1
  26. package/public/{chunk-dgaOX1wC.js → chunk-CSpA60X7.js} +1 -1
  27. package/public/{chunk-C6UXF7BI.js → chunk-CU8RPnsi.js} +1 -1
  28. package/public/{chunk-CNNTuNlM.js → chunk-CcvYOops.js} +1 -1
  29. package/public/{chunk-CA6RRaxd.js → chunk-CdSWuWKr.js} +1 -1
  30. package/public/{chunk-DQnoPLyC.js → chunk-CjsnWLUr.js} +1 -1
  31. package/public/{chunk-BX6skw5k.js → chunk-CkfPr-c5.js} +1 -1
  32. package/public/{chunk-nu4vZg-z.js → chunk-CoEM_FqS.js} +1 -1
  33. package/public/{chunk-DNS-qsFC.js → chunk-Cr34s2uQ.js} +1 -1
  34. package/public/{chunk-BJz7Ij9E.js → chunk-Cu9FE8cB.js} +1 -1
  35. package/public/{chunk-B6bEhzNR.js → chunk-CyURmwWh.js} +1 -1
  36. package/public/{chunk-CrBxxZCe.js → chunk-D-xDPCf7.js} +1 -1
  37. package/public/{chunk-5U8d2Ygo.js → chunk-D0MyVrEL.js} +1 -1
  38. package/public/{chunk-DjZgzSiH.js → chunk-DBA0eRqb.js} +1 -1
  39. package/public/{chunk-BKj60jdq.js → chunk-DGOvRnAo.js} +1 -1
  40. package/public/{chunk-CXvG8mMq.js → chunk-DMhuBqKs.js} +1 -1
  41. package/public/{chunk-DchvLV_Y.js → chunk-DMoEBcor.js} +1 -1
  42. package/public/chunk-DSvdWjO4.js +1 -0
  43. package/public/{chunk-D4xZ2tGB.js → chunk-DVB9tiW3.js} +1 -1
  44. package/public/{chunk-Dxlia2NE.js → chunk-D_wrJJxl.js} +1 -1
  45. package/public/{chunk-BwOIef42.js → chunk-DfGLo6Tb.js} +1 -1
  46. package/public/{chunk-BdokyhBM.js → chunk-Di5pPpU7.js} +1 -1
  47. package/public/{chunk-BoNDCNGE.js → chunk-DjavLLpP.js} +1 -1
  48. package/public/{chunk-CL2xiH57.js → chunk-Dv77RFHm.js} +1 -1
  49. package/public/{chunk-AANk-NXH.js → chunk-NnB8OYZt.js} +3 -3
  50. package/public/{chunk-By8ZVvDx.js → chunk-h2q_pbbF.js} +1 -1
  51. package/public/{chunk-tAiV3ARh.js → chunk-o977r5_s.js} +1 -1
  52. package/public/{chunk-DXkKj21H.js → chunk-oPq9Nexl.js} +1 -1
  53. package/public/{chunk-VgxMqRPk.js → chunk-oZiyAw_P.js} +1 -1
  54. package/public/chunk-zg7II0hz.js +1 -0
  55. package/public/index.html +1 -1
  56. package/public/{main-BAV5VDOD.js → main-BNR44HGB.js} +20 -20
  57. package/public/chunk-Blokg6Ds.js +0 -1
  58. package/public/chunk-CpMCBDvH.js +0 -1
  59. package/public/chunk-y1imvaA-.js +0 -1
@@ -1 +0,0 @@
1
- import {u}from'./chunk-hd2_AKwt.js';import {d1 as Hj,w,du as p,dv as rt,dD as _,v as vt,D as Dt,F as Fa,dn as ge,J as JD,P as Pi,c as $h,u as ul,e as EE,B as Bh,bu as ut,aZ as F,$ as $j,dx as n$1,ay as lv,k as Qh,T as TT,dQ as AT,f as eg,K as Kw}from'./main-BAV5VDOD.js';var Z=["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 z={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},k={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},q=(()=>{class l{unitsService=w(ut);canvasService=w(F);canvasRef=$j("gaugeCanvas");widgetUUID=Hj();subType=Hj();barGauge=Hj();radialSize=Hj();backgroundColor=Hj();frameColor=Hj();minValue=Hj();maxValue=Hj();decimals=Hj();zones=Hj();title=Hj();units=Hj();value=Hj();theme=Hj(void 0,{alias:"themeColors"});gaugeStarted=false;gauge=null;gaugeOptions={};paddingTop=0;lastSizeSignature="";resizeTimer=null;pendingStructuralRebuild=false;ngOnInit(){this.buildOptions();}buildOptions(){this.gaugeOptions={};let e=this.minValue()??0,t=this.maxValue()??100;this.gaugeOptions.minValue=e,this.gaugeOptions.maxValue=t;let i=this.decimals();this.gaugeOptions.lcdDecimals=i??2,this.gaugeOptions.titleString=this.title()??"",this.gaugeOptions.unitString=this.units()??"",this.subType()=="radial"&&(this.gaugeOptions.gaugeType=this.setGaugeType(this.radialSize()));let s=this.zones();if(s){let r=this.theme(),u={emergency:r?.zoneEmergency??"rgba(0,0,0,0)",alarm:r?.zoneAlarm??"rgba(0,0,0,0)",warn:r?.zoneWarn??"rgba(0,0,0,0)",alert:r?.zoneAlert??"rgba(0,0,0,0)",nominal:r?.zoneNominal??"rgba(0,0,0,0)"},d=[],b=[],D=[...s].sort((C,m)=>(C.lower??Number.NEGATIVE_INFINITY)-(m.lower??Number.NEGATIVE_INFINITY));for(let C of D){let m=C.lower,S=C.upper;if(m===void 0||S===void 0)continue;let c=m,p=S,g;switch(C.state){case n$1.Emergency:g=u.emergency;break;case n$1.Alarm:g=u.alarm;break;case n$1.Warn:g=u.warn;break;case n$1.Alert:g=u.alert;break;case n$1.Nominal:g=u.nominal;break;default:g="rgba(0,0,0,0)";}let G=this.units();if(G=="ratio"?(c=m,p=S):(c=this.unitsService.convertToUnit(G??"",m)??m,p=this.unitsService.convertToUnit(G??"",S)??S),!(p<e||c>t)){if(c=Math.max(c,e),p>t){p=t,d.push(steelseries.Section(c,p,g));break}d.push(steelseries.Section(c,p,g));}}this.gaugeOptions.section=d,this.gaugeOptions.area=b,this.gaugeOptions.useSectionColors=true;}let n=this.backgroundColor();n&&n in z&&(this.gaugeOptions.backgroundColor=z[n]);let o=this.frameColor();o&&o in k&&(this.gaugeOptions.frameDesign=k[o]),this.barGauge()&&(this.gaugeOptions.valueColor=steelseries.ColorDef.GREEN),this.gaugeOptions.lcdVisible=true,this.gaugeOptions.thresholdVisible=false,this.gaugeOptions.threshold=this.maxValue(),this.gaugeOptions.ledVisible=false;}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=false){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=true;return}this.pendingStructuralRebuild=false,this.gaugeStarted=true;let s=this.subType();s==="radial"?this.gauge=new steelseries.Radial(t,this.gaugeOptions):s==="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),s=Math.floor(e.contentRect.height);this.gaugeOptions.width=i,this.gaugeOptions.height=s,t=`linear:${i}x${s}`;}t!==this.lastSizeSignature&&(this.lastSizeSignature=t,this.resizeTimer&&window.clearTimeout(this.resizeTimer),this.resizeTimer=window.setTimeout(()=>{this.startGauge(true),this.resizeTimer=null;},120));}ngOnChanges(e){this.gaugeStarted&&(e.value&&!e.value.firstChange&&e.value.currentValue!=null&&this.gauge?.setValueAnimated?.(e.value.currentValue),e.zones&&(this.pendingStructuralRebuild=true,this.startGauge(true)),e.title&&this.gauge?.setTitleString?.(e.title.currentValue??""),e.backgroundColor&&e.backgroundColor.currentValue in z&&this.gauge?.setBackgroundColor?.(z[e.backgroundColor.currentValue]),e.frameColor&&e.frameColor.currentValue in k&&this.gauge?.setFrameDesign?.(k[e.frameColor.currentValue]),e.radialSize&&(this.pendingStructuralRebuild=true,this.startGauge(true)),e.minValue&&e.minValue.currentValue!=null&&this.gauge?.setMinValue?.(e.minValue.currentValue),e.maxValue&&e.maxValue.currentValue!=null&&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??0);}let e=this.widgetUUID();if(e){let t=document.getElementById(e);this.canvasService.releaseCanvas(t,{clear:true,removeFromDom:true});}this.gauge=null;}static \u0275fac=function(t){return new(t||l)};static \u0275cmp=JD({type:l,selectors:[["gauge-steel"]],viewQuery:function(t,i){t&1&&eg(i.canvasRef,Z,5),t&2&&Kw();},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:[lv],decls:4,vars:2,consts:[["gaugeCanvas",""],["kipResizeObserver","",1,"wrapper",3,"resizeChange"],[2,"z-index","inherit",3,"id"]],template:function(t,i){t&1&&(Pi(0,"div",1),Qh("resizeChange",function(n){return i.onResized(n)}),Pi(1,"canvas",2,0),TT(3," Browser does not support canvas element. "),ul()()),t&2&&(EE(),Bh("id",AT(i.widgetUUID())));},dependencies:[u],styles:[".sgWrapper[_ngcontent-%COMP%]{height:100%;width:100%;text-align:center}"]})}return l})();var ue=(()=>{class l{id=Hj.required();type=Hj.required();theme=Hj.required();runtime=w(p);streams=w(rt);metadata=w(_);static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:true,displayName:"Gauge Label",filterSelfPaths:true,paths:{gaugePath:{description:"Numeric Data",path:null,source:null,pathType:"number",isPathConfigurable:true,showPathSkUnitsFilter:true,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:false,digitalMeter:false},numDecimal:2,enableTimeout:false,dataTimeout:5,ignoreZones:false};dataValue=vt(0);zones=vt([]);normalizedConfig=Dt(()=>this.runtime.options()??l.DEFAULT_CONFIG);gaugePathConfig=Dt(()=>this.normalizedConfig().paths?.gaugePath);displayName=Dt(()=>this.normalizedConfig().displayName||"Gauge Label");gaugeUnits=Dt(()=>this.gaugePathConfig()?.convertUnitTo??"");constructor(){Fa(()=>{let e=this.normalizedConfig();this.gaugePathConfig()?.path&&ge(()=>this.streams.observe("gaugePath",i=>{let s=i?.data?.value,n=e.displayScale?.lower??0,o=e.displayScale?.upper??n+100;if(s==null)this.dataValue.set(n);else {let r=Math.min(Math.max(s,n),o);this.dataValue.set(r);}}));}),Fa(()=>{if(this.normalizedConfig().ignoreZones){this.zones.set([]);return}if(!this.gaugePathConfig()?.path){this.zones.set([]);return}ge(()=>this.metadata.observe("gaugePath")),this.zones.set(this.metadata.zones());});}static \u0275fac=function(t){return new(t||l)};static \u0275cmp=JD({type:l,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&&(Pi(0,"div",0),$h(1,"gauge-steel",1),ul()),t&2){let s,n,o,r,u,d,b,D;EE(),Bh("widgetUUID",i.id())("subType",(s=i.runtime.options())==null||s.gauge==null?null:s.gauge.subType)("barGauge",(n=i.runtime.options())==null||n.gauge==null?null:n.gauge.digitalMeter)("radialSize",(o=i.runtime.options())==null||o.gauge==null?null:o.gauge.radialSize)("backgroundColor",(r=i.runtime.options())==null||r.gauge==null?null:r.gauge.backgroundColor)("frameColor",(u=i.runtime.options())==null||u.gauge==null?null:u.gauge.faceColor)("minValue",(d=i.runtime.options())==null||d.displayScale==null?null:d.displayScale.lower)("maxValue",(b=i.runtime.options())==null||b.displayScale==null?null:b.displayScale.upper)("decimals",(D=i.runtime.options())==null?null:D.numDecimal)("zones",i.zones())("title",i.displayName())("units",i.gaugeUnits())("value",i.dataValue())("themeColors",i.theme());}},dependencies:[q],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%)}"]})}return l})();export{ue as WidgetSteelGaugeComponent};
@@ -1 +0,0 @@
1
- import {d1 as Hj,w,du as p,dv as rt,$ as $j,aZ as F,v as vt,D as Dt,F as Fa,dn as ge,dS as Da,J as JD,cp as Uh,f as eg,K as Kw}from'./main-BAV5VDOD.js';import {c}from'./chunk-Dxlia2NE.js';var x=["canvasMainRef"],R=(()=>{class s{id=Hj.required();type=Hj.required();theme=Hj.required();runtime=w(p);streams=w(rt);static DEFAULT_CONFIG={displayName:"Time Label",filterSelfPaths:true,paths:{gaugePath:{description:"Date / Time",path:null,source:null,pathType:"Date",isPathConfigurable:true,sampleTime:1e3}},dateFormat:"dd/MM/yyyy HH:mm:ss",dateTimezone:"Atlantic/Azores",color:"contrast",enableTimeout:false,dataTimeout:5};canvasMainRef=$j.required("canvasMainRef");canvasElement;canvasCtx=null;titleBitmap=null;titleBitmapText=null;titleBitmapColor=null;canvas=w(F);cssWidth=0;cssHeight=0;dataValue=vt(null);_timeZoneGTM="";isDestroyed=false;labelColor=vt("");valueColor="";maxTextWidth=0;maxTextHeight=0;displayName=Dt(()=>this.runtime.options()?.displayName??"Time Label");dateFormat=Dt(()=>this.runtime.options()?.dateFormat??"dd/MM/yyyy HH:mm:ss");dateTimezone=Dt(()=>this.runtime.options()?.dateTimezone??"System Timezone -");constructor(){Fa(()=>{let e=this.runtime.options(),t=this.theme();!e||!t||ge(()=>{this.applyColors(),e.paths?.gaugePath?.path&&(this._timeZoneGTM=this.getGMTOffset(this.dateTimezone()),this.streams.observe("gaugePath",a=>{this.dataValue.set(a?.data?.value??null),this.drawWidget();}));});}),Fa(()=>{let e=this.theme(),t=this.runtime.options();!e||!t||ge(()=>{this.applyColors(),this.drawWidget();});});}ngAfterViewInit(){this.canvasElement=this.canvasMainRef().nativeElement,this.canvasCtx=this.canvasElement.getContext("2d"),this.canvas.registerCanvas(this.canvasElement,{autoRelease:true,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 a=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"short"}).formatToParts(new Date).find(M=>M.type==="timeZoneName");return a?a.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(c(e.color??"contrast",t).dim),this.valueColor=c(e.color??"contrast",t).color);}ngOnDestroy(){this.isDestroyed=true;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??"contrast"}`||this.titleBitmapColor!==e)&&(this.titleBitmap=this.canvas.createTitleBitmap(this.displayName(),e,"normal",this.cssWidth,this.cssHeight),this.titleBitmapText=`${this.displayName()}-${this.runtime.options()?.color??"contrast"}`,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=Da(i,this.dateFormat(),"en-US",this._timeZoneGTM);}catch(a){t=String(a),console.log("[Date Time Widget]: "+String(a));}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||s)};static \u0275cmp=JD({type:s,selectors:[["widget-datetime"]],viewQuery:function(t,i){t&1&&eg(i.canvasMainRef,x,5),t&2&&Kw();},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&&Uh(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}"]})}return s})();export{R as WidgetDatetimeComponent};
@@ -1 +0,0 @@
1
- import {g as ge$1}from'./chunk-TakPRI3t.js';import {d1 as Hj,w,du as p,C as Ff,ao as ue,bu as ut$1,G as Gi,aR as lt$1,a as G,$ as $j,v as vt,D as Dt,dG as rn,F as Fa,dn as ge,dH as ac,cw as z,cv as G$1,dI as cn,dJ as nc,dK as qn,dL as zn,dM as pa,J as JD,O as Op,R as Rp,y as yt,b as wt,cG as Ht,cH as R,cI as ee,cJ as Nt,cK as Lt,cR as zt,bg as mt$1,P as Pi,k as Qh,_ as _w,u as ul,T as TT,cn as wd,c as $h,cV as Td,cf as xh,bl as Jw,e as EE,B as Bh,an as Hh,M as Mw,s as sg,f as eg,K as Kw,aS as De,aY as xe,ab as te,aj as zm,a_ as Gp,cO as eu,dN as Q,h as Fw,g as qw,X as xw,Y as Aw,bp as gl,dj as Nw,d as ig,aA as gg,l as ud,m as dd,dO as fp}from'./main-BAV5VDOD.js';import {u}from'./chunk-hd2_AKwt.js';import {c}from'./chunk-Dxlia2NE.js';var W=false,et=250,tt=["atons.urn:mrn:imo:mmsi:*","shore.basestations.urn:mrn:imo:mmsi:*","vessels.urn:mrn:imo:mmsi:*","sar.urn:mrn:imo:mmsi:*"],it=[{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"}],st="self.navigation.*",qe=(()=>{class l{data=w(De);destroyRef=w(xe);tracks=new Map;contextIndex=new Map;mmsiIndex=new Map;targetsDirty$=new te;_targets=vt([]);_ownShip=vt({});_hasCollisionRiskData=vt(false);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,s=t.latitude*Math.PI/180,r=(t.longitude-e.longitude)*Math.PI/180,a=Math.sin(r)*Math.cos(s),n=Math.cos(i)*Math.sin(s)-Math.sin(i)*Math.cos(s)*Math.cos(r),h=Math.atan2(a,n)*180/Math.PI;return this.wrapDegrees(h)}constructor(){zm(...tt.map(t=>this.data.subscribePathTree(t))).pipe(Gp(this.destroyRef)).subscribe(t=>this.handleAisTreeUpdate(t)),this.data.subscribePathTree(st).pipe(Gp(this.destroyRef)).subscribe(t=>this.handleOwnShipTreeUpdate(t)),this.targetsDirty$.pipe(eu(et,void 0,{leading:true,trailing:true}),Gp(this.destroyRef)).subscribe(()=>this.flushTargetsSignal());}handleAisTreeUpdate(e){let t=this.matchAisContext(e.path);t&&(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 it){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=G$1({},this._ownShip()),s=this.readPositionValue(t);switch(e){case "navigation.position":s&&(i.position=s);break;case "navigation.position.latitude":{let r=this.toNumberOrUndefined(t);if(r===void 0)return;i.position=z(G$1({},i.position??{}),{latitude:r});}break;case "navigation.position.longitude":{let r=this.toNumberOrUndefined(t);if(r===void 0)return;i.position=z(G$1({},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){switch(t.lastUpdateAt=e.timestampMs,e.path.startsWith("navigation.closestApproach.")&&this.isVesselLike(t)&&!t.closestApproach&&(t.closestApproach={}),e.path){case "mmsi":this.applyMmsi(t,e.value);break;case "name":t.name=this.toStringOrUndefined(e.value);break;case "communication.callsignVhf":this.isVesselLike(t)&&(t.callsign=this.toStringOrUndefined(e.value));break;case "navigation.destination":case "navigation.destination.commonName":this.isVesselLike(t)&&(t.destination=this.toStringOrUndefined(e.value));break;case "navigation.destination.eta":this.isVesselLike(t)&&(t.eta=this.toStringOrUndefined(e.value));break;case "design.beam":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{beam:this.toNumberOrUndefined(e.value)}));break;case "design.length.overall":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{length:z(G$1({},t.design?.length??{}),{overall:this.toNumberOrUndefined(e.value)})}));break;case "design.length.hull":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{length:z(G$1({},t.design?.length??{}),{hull:this.toNumberOrUndefined(e.value)})}));break;case "design.length.waterline":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{length:z(G$1({},t.design?.length??{}),{waterline:this.toNumberOrUndefined(e.value)})}));break;case "design.draft.maximum":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{draft:z(G$1({},t.design?.draft??{}),{maximum:this.toNumberOrUndefined(e.value)})}));break;case "design.draft.minimum":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{draft:z(G$1({},t.design?.draft??{}),{minimum:this.toNumberOrUndefined(e.value)})}));break;case "design.draft.current":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{draft:z(G$1({},t.design?.draft??{}),{current:this.toNumberOrUndefined(e.value)})}));break;case "design.draft.canoe":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{draft:z(G$1({},t.design?.draft??{}),{canoe:this.toNumberOrUndefined(e.value)})}));break;case "registrations.imo":this.isVesselLike(t)&&(t.imo=this.toStringOrUndefined(e.value));break;case "navigation.courseOverGroundTrue":this.isVesselLike(t)&&(t.courseOverGroundTrue=this.toNumberOrUndefined(e.value));break;case "navigation.headingTrue":this.isVesselLike(t)&&(t.headingTrue=this.toNumberOrUndefined(e.value));break;case "navigation.rateOfTurn":this.isVesselLike(t)&&(t.rateOfTurn=this.toNumberOrUndefined(e.value));break;case "navigation.specialManeuver":this.isVesselLike(t)&&(t.specialManeuver=this.toStringOrUndefined(e.value));break;case "navigation.speedOverGround":this.isVesselLike(t)&&(t.speedOverGround=this.toNumberOrUndefined(e.value));break;case "navigation.state":this.isVesselLike(t)&&(t.navState=this.toStringOrUndefined(e.value));break;case "sensors.ais.class":t.ais.class=this.normalizeAisClass(e.value);break;case "sensors.ais.status":{let i=this.normalizeAisStatus(e.value);if(!i)break;if(i==="remove"){this.removeTrack(t);return}t.ais.status=i;}break;case "sensors.ais.fromBow":this.isVesselLike(t)&&(t.fromBow=this.toNumberOrUndefined(e.value));break;case "sensors.ais.fromCenter":this.isVesselLike(t)&&(t.fromCenter=this.toNumberOrUndefined(e.value));break;case "navigation.position.latitude":{let i=this.toNumberOrUndefined(e.value);if(i===void 0)break;t.position=z(G$1({},t.position??{}),{latitude:i}),t.lastPositionAt=e.timestampMs;}break;case "navigation.position.longitude":{let i=this.toNumberOrUndefined(e.value);if(i===void 0)break;t.position=z(G$1({},t.position??{}),{longitude:i}),t.lastPositionAt=e.timestampMs;}break;case "navigation.position.altitude":{let i=this.toNumberOrUndefined(e.value);t.position&&(t.position=z(G$1({},t.position),{altitude:i}));}break;case "navigation.position":{let i=this.readPositionValue(e.value);i&&(t.position=i,t.lastPositionAt=e.timestampMs);}break;case "atonType.id":this.isAton(t)&&(t.typeId=this.toNumberOrUndefined(e.value));break;case "atonType.name":this.isAton(t)&&(t.typeName=this.toStringOrUndefined(e.value));break;case "virtual":this.isAton(t)&&(t.virtual=!!e.value);break;case "offPosition":this.isAton(t)&&(t.offPosition=!!e.value);break;case "design.aisShipType.id":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{aisShipType:z(G$1({},t.design?.aisShipType??{}),{id:this.toNumberOrUndefined(e.value)})}));break;case "design.aisShipType.name":this.isVesselLike(t)&&(t.design=z(G$1({},t.design??{}),{aisShipType:z(G$1({},t.design?.aisShipType??{}),{name:this.toStringOrUndefined(e.value)})}));break;case "navigation.closestApproach.distance":this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.distance=this.toNumberOrUndefined(e.value));break;case "navigation.closestApproach.timeTo":this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.timeTo=this.toNumberOrUndefined(e.value));break;case "navigation.closestApproach.range":this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.range=this.toNumberOrUndefined(e.value));break;case "navigation.closestApproach.bearing":this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.bearing=this.toNumberOrUndefined(e.value));break;case "navigation.closestApproach.collisionRiskRating":this.isVesselLike(t)&&t.closestApproach&&(t.closestApproach.collisionRiskRating=this.toNumberOrUndefined(e.value));break}this.updateTargetsSignal();}}resolveTrack(e){let t=this.contextIndex.get(e.context),i=e.timestampMs,s=t?this.tracks.get(t):null;if(s)return s;let r=this.createTrack(e.context,e.type,i,void 0);return this.contextIndex.set(e.context,r.id),r}createTrack(e,t,i,s){let r=this.buildTrackId(s??e),a=this.buildBaseTarget(e,t,i,s,r),n;switch(t){case "vessel":n=z(G$1({},a),{type:"vessel",closestApproach:{}});break;case "sar":n=z(G$1({},a),{type:"sar",closestApproach:{}});break;case "aton":n=z(G$1({},a),{type:"aton"});break;default:n=z(G$1({},a),{type:"basestation"});break}return this.tracks.set(n.id,n),s&&this.addMmsiIndex(s,n.id),this.updateTargetsSignal(),n}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 s=this.getTracksByMmsi(i).filter(r=>r.id!==e.id);s.length&&(this.markConflict(i),W),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);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 false;let s=i.closestApproach??{};return Object.prototype.hasOwnProperty.call(s,"collisionRiskRating")});this._targets.set(e),this._hasCollisionRiskData.set(t);}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=true;}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,s,r){return {id:r,context:e,type:t,ais:{class:void 0,status:"unconfirmed"},conflicted:false,mmsi:s,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 s=this.toNumberOrUndefined(e.altitude);return {latitude:t,longitude:i,altitude:s}}static \u0275fac=function(t){return new(t||l)};static \u0275prov=Q({token:l,factory:l.\u0275fac,providedIn:"root"})}return l})();var nt=["radarSvg"],rt=["menuAnchor"],at=["menuTrigger"],ot=(l,A)=>A.id;function lt(l,A){l&1&&(wd(),Pi(0,"svg",7),$h(1,"path",17),Pi(2,"text",18),TT(3,"N"),ul()());}function ct(l,A){l&1&&(wd(),Pi(0,"svg",7),$h(1,"path",19),ul());}function dt(l,A){if(l&1){let e=Fw();Pi(0,"button",20),Qh("click",function(){ud(e);let i=qw();return dd(i.toggleFilter("noCollisionRisk"))}),Pi(1,"mat-icon"),TT(2,"security"),ul()();}if(l&2){let e=qw();sg("is-active",e.isFilterEnabled("noCollisionRisk"));}}function ht(l,A){if(l&1){let e=Fw();Pi(0,"button",22),Qh("click",function(){let i=ud(e).$implicit,s=qw(2);return dd(s.onMenuItemSelect(i))}),$h(1,"img",23),Pi(2,"span",24),TT(3),ul()();}if(l&2){let e=A.$implicit;EE(),ig("visibility",e.iconHref?"visible":"hidden"),Hh("src",e.iconHref??null,fp),EE(2),gg(e.label);}}function ut(l,A){if(l&1&&xw(0,ht,4,4,"button",21,ot),l&2){let e=qw();Aw(e.menuItems());}}function mt(l,A){if(l&1){let e=Fw();Pi(0,"button",25),TT(1,"Filter Targets"),ul(),Pi(2,"button",26),Qh("click",function(){ud(e);let i=qw();return dd(i.toggleFilter("anchoredMoored"))}),Pi(3,"mat-icon",27),TT(4),ul(),Pi(5,"span"),TT(6,"Anchored/Moored"),ul()(),Pi(7,"button",26),Qh("click",function(){ud(e);let i=qw();return dd(i.toggleFilter("allAton"))}),Pi(8,"mat-icon",27),TT(9),ul(),Pi(10,"span"),TT(11,"All AtoN"),ul()(),Pi(12,"button",26),Qh("click",function(){ud(e);let i=qw();return dd(i.toggleFilter("allButSar"))}),Pi(13,"mat-icon",27),TT(14),ul(),Pi(15,"span"),TT(16,"All but SAR"),ul()(),Pi(17,"button",26),Qh("click",function(){ud(e);let i=qw();return dd(i.toggleFilter("allVessels"))}),Pi(18,"mat-icon",27),TT(19),ul(),Pi(20,"span"),TT(21,"All Vessels"),ul()(),Pi(22,"button",28)(23,"span"),TT(24,"Vessel Type"),ul(),Pi(25,"mat-icon"),TT(26,"chevron_right"),ul()();}if(l&2){let e=qw(),t=Jw(26);EE(4),gl(" ",e.isFilterEnabled("anchoredMoored")?"check_box":"check_box_outline_blank"," "),EE(5),gl(" ",e.isFilterEnabled("allAton")?"check_box":"check_box_outline_blank"," "),EE(5),gl(" ",e.isFilterEnabled("allButSar")?"check_box":"check_box_outline_blank"," "),EE(5),gl(" ",e.isFilterEnabled("allVessels")?"check_box":"check_box_outline_blank"," "),EE(3),Bh("matMenuTriggerFor",t);}}function gt(l,A){if(l&1){let e=Fw();Pi(0,"button",26),Qh("click",function(){let i=ud(e).$implicit,s=qw(2);return dd(s.toggleVesselTypeFilter(i))}),Pi(1,"mat-icon",27),TT(2),ul(),Pi(3,"span"),TT(4),ul()();}if(l&2){let e=A.$implicit,t=qw(2);EE(2),gl(" ",t.isVesselTypeFilterEnabled(e)?"check_box":"check_box_outline_blank"," "),EE(2),gg(t.formatVesselTypeLabel(e));}}function ft(l,A){if(l&1&&xw(0,gt,5,2,"button",29,Nw),l&2){let e=qw();Aw(e.vesselTypeFilters);}}function pt(l,A){l&1&&$h(0,"div",16);}var Xt=(()=>{class l{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=Hj.required();type=Hj.required();theme=Hj.required();runtime=w(p);ais=w(qe);dialog=w(Ff);ngZone=w(ue);units=w(ut$1);settings=w(Gi);toast=w(lt$1);dashboard=w(G);static DEFAULT_CONFIG={filterSelfPaths:false,enableTimeout:false,dataTimeout:5,ais:{filters:{anchoredMoored:false,noCollisionRisk:false,allAton:false,allButSar:false,allVessels:false,vesselTypes:[]},viewMode:"course-up",rangeRings:[1,3,6,12,24,48],rangeIndex:"3",showCogVectors:true,cogVectorsMinutes:10,showLostTargets:true,showUnconfirmedTargets:true,showSelf:true},color:"grey"};svgRef=$j.required("radarSvg");menuAnchorRef=$j.required("menuAnchor");menuTrigger=$j.required("menuTrigger");hostSize=vt(null);renderState=null;selectedId=vt(null);localViewMode=vt(null);localRangeIndex=vt(null);effectiveViewMode=Dt(()=>this.localViewMode()??this.runtime.options()?.ais?.viewMode??"course-up");effectiveRangeIndex=Dt(()=>{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),s=this.localRangeIndex()??e;return Math.min(Math.max(s,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=vt([]);menuPoint=null;lastRenderTargets=[];lastRenderScale=1;lastRenderSize=null;hitRadiusPx=l.HIT_RADIUS_PX;lastFiltersSignature=null;lastRenderSignature=null;filterState=vt({anchoredMoored:false,noCollisionRisk:false,allAton:false,allButSar:false,allVessels:false,vesselTypes:new Set});vesselTypeFilters=rn.filter(e=>e!=="vessel/self"&&e!=="vessel/unknown"&&e!=="vessel/spare");hasActiveFilters=Dt(()=>{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(),Fa(()=>{let e=this.hostSize(),t=this.runtime.options(),i=this.theme(),s=this.ais.targets(),r=this.ais.ownShip();!e||!t||!i||(ge(()=>{this.renderState={size:e,cfg:t,theme:i,targets:s,ownShip:r},this.syncFiltersFromConfig(t);}),this.scheduleRender());}),Fa(()=>{this.localViewMode(),this.localRangeIndex(),this.selectedId(),this.filterState(),ge(()=>{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,false,"warn");}loadOwnShipIcon(){this.ngZone.runOutsideAngular(()=>{ac().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=ge$1(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();},l.ICON_RENDER_DEBOUNCE_MS);});}render(){if(!this.renderState||!this.svg||!this.root)return;let{size:e,cfg:t,theme:i,targets:s,ownShip:r}=this.renderState,a=Math.max(1,e.width),n=Math.max(1,e.height),h=Math.min(a,n)/2,g=(Math.min(a,n)-35)/Math.min(a,n),M=Math.hypot(a,n)/2/g,b=t.ais??{},V=b.rangeRings?.length?b.rangeRings:[3,6,12,24,48],v=this.effectiveRangeIndex(),o=V[v]??V[0],_=this.resolveRingCountForRange(o),f=this.localViewMode()??b.viewMode??"course-up",R=this.toDegreesIfRadians(r.courseOverGroundTrue),k=this.toDegreesIfRadians(r.headingTrue),L=R!==null||k!==null,m=f==="course-up"?R??k??0:0,z=this.viewRotationSmoothed!==null&&Math.abs(this.shortestAngleDelta(this.viewRotationSmoothed,m))>.5,E=this.buildFilterStateSignature(this.filterState()),S={sizeKey:`${a}x${n}`,viewMode:f,rangeIndex:v,rangesKey:V.join(","),showSelf:b.showSelf??true,showCogVectors:b.showCogVectors??true,showLostTargets:b.showLostTargets??true,showUnconfirmedTargets:b.showUnconfirmedTargets??true,filtersKey:E,selectedId:this.selectedId(),targetsRef:s,ownShipRef:r,themeRef:i,color:t.color},y=this.lastRenderSignature;if(!z&&y&&y.sizeKey===S.sizeKey&&y.viewMode===S.viewMode&&y.rangeIndex===S.rangeIndex&&y.rangesKey===S.rangesKey&&y.showSelf===S.showSelf&&y.showCogVectors===S.showCogVectors&&y.showLostTargets===S.showLostTargets&&y.showUnconfirmedTargets===S.showUnconfirmedTargets&&y.filtersKey===S.filtersKey&&y.selectedId===S.selectedId&&y.targetsRef===S.targetsRef&&y.ownShipRef===S.ownShipRef&&y.themeRef===S.themeRef&&y.color===S.color)return;this.lastRenderSignature=S;let D=f==="course-up"&&L?this.smoothRotation(m):0,T=f==="course-up"?Math.abs(this.shortestAngleDelta(D,m)):0;this.svg.attr("viewBox",`${-a/2} ${-n/2} ${a} ${n}`),this.root.attr("transform",`scale(${g})`);let te=this.wrapDegrees((R??k??0)-D),Ye=c(t.color??"contrast",i).dim;if(this.renderRings(_,o,h,M,D,g,b.showSelf??true,te,Ye),!r.position||!this.hasValidPosition(r.position))return;let Qe=M/h*o,K=this.buildTargets(s,r.position,o,Qe,h,D,b);this.lastRenderTargets=K,this.lastRenderScale=g,this.lastRenderSize=e,this.renderVectors(K,o,h,D,b,r),this.renderTargets(K,g),this.renderSelected(K,g),this.raiseOwnshipAndVector(),T>.5&&this.scheduleRender();}renderRings(e,t,i,s,r,a,n,h,g){if(!this.ringsLayer)return;let M=`${t.toFixed(3)}|${i.toFixed(3)}|${s.toFixed(3)}|${e}`;if(!this.ringCache||this.ringCache.key!==M){let m=t/Math.max(1,e),z=s/i*t,E=[];for(let T=m;T<=z+1e-6;T+=m)E.push(T);let S=E.map(T=>({value:T,radius:T/t*i})).filter(T=>T.radius<=s+1e-6),y=20,D=S.flatMap(T=>[{key:`${T.value}-top`,value:T.value,x:0,y:-T.radius+y},{key:`${T.value}-bottom`,value:T.value,x:0,y:T.radius-y}]);this.ringCache={key:M,rings:S,labels:D};}let b=this.ringCache;if(!b)return;let V=b.rings,v=this.ringsLayer.selectAll("circle.ring").data(V,m=>m.value.toString());v.enter().append("circle").attr("class","ring").merge(v).attr("r",m=>m.radius).attr("stroke",g),v.exit().remove();let o=b.labels,_=this.ringsLayer.selectAll("text.ring-label").data(o,m=>m.key);_.enter().append("text").attr("class","ring-label").merge(_).attr("x",m=>m.x).attr("y",m=>m.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(m=>`${m.value}`),_.exit().remove();let f=this.ringsLayer.selectAll("circle.radar-center").data(n?[]:[{r:Math.max(3,i*.01)}]);f.enter().append("circle").attr("class","radar-center").merge(f).attr("cx",0).attr("cy",0).attr("r",m=>m.r).attr("fill",g),f.exit().remove();let R=this.ownShipLayer.selectAll("g.radar-ownship").data(n?[{size:this.resolveOwnShipBaseSize(a)}]:[]),k=R.enter().append("g").attr("class","radar-ownship");k.append("image").attr("class","ownship-icon").attr("href",this.ownShipIconHref??null).attr("xlink:href",this.ownShipIconHref??null);let L=k.merge(R);L.attr("transform",`rotate(${h})`),L.select("image.ownship-icon").attr("href",this.ownShipIconHref??null).attr("xlink:href",this.ownShipIconHref??null).attr("display",this.ownShipIconHref?null:"none").attr("width",m=>m.size).attr("height",m=>m.size).attr("x",m=>-m.size/2).attr("y",m=>-m.size/2),R.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=>z(G$1({},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),z(G$1({},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??false,noCollisionRisk:t.noCollisionRisk??false,allAton:t.allAton??false,allButSar:t.allButSar??false,allVessels:t.allVessels??false,vesselTypes:new Set(t.vesselTypes??[])}));}buildFilterSignature(e){let t=[...e?.vesselTypes??[]].sort();return JSON.stringify({anchoredMoored:e?.anchoredMoored??false,noCollisionRisk:e?.noCollisionRisk??false,allAton:e?.allAton??false,allButSar:e?.allButSar??false,allVessels:e?.allVessels??false,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,s,r,a,n){let h=n.showLostTargets??true,g=n.showUnconfirmedTargets??true,M=`${t.latitude?.toFixed(6)}|${t.longitude?.toFixed(6)}`;this.lastOriginKey!==M&&(this.targetCache.clear(),this.lastOriginKey=M);let b=new Set;for(let o of e)b.add(o.id);for(let o of this.targetCache.keys())b.has(o)||this.targetCache.delete(o);for(let o of this.iconCache.keys())b.has(o)||this.iconCache.delete(o);let V=[];for(let o of e)o.ais.status==="remove"&&(this.targetCache.delete(o.id),this.iconCache.delete(o.id),this.selectedId()===o.id&&this.selectedId.set(null));let v=e.filter(o=>o.ais.status==="remove"||o.ais.status==="lost"&&!h||o.ais.status==="unconfirmed"&&!g||!o.position||!this.hasValidPosition(o.position)?false:!this.shouldFilterTarget(o));for(let o of v){let _=this.buildTrackSignature(o),f=this.targetCache.get(o.id);if(!f||f.signature!==_){let y=this.distanceNm(t,o.position),D=this.ais.getBearingTrue(t,o.position)??0,T=this.toDegreesIfRadians(this.isVesselLike(o)?o.headingTrue:null),te=this.toDegreesIfRadians(this.isVesselLike(o)?o.courseOverGroundTrue:null);f={signature:_,distanceNm:y,bearing:D,trackHeading:T,trackCog:te},this.targetCache.set(o.id,f);}if(f.distanceNm>s)continue;let{href:R,scale:k}=this.resolveIconCached(o),L=this.wrapDegrees(f.bearing-a),{x:m,y:z}=this.polarToCartesian(L,f.distanceNm,i,r),E=o.type==="aton"||o.type==="basestation"?0:this.wrapDegrees((f.trackHeading??f.trackCog??0)-a),S=this.buildClassName({id:o.id,status:o.ais.status,aisClass:o.ais.class,type:o.type,navState:this.isVesselLike(o)?o.navState:void 0});V.push({id:o.id,raw:o,x:m,y:z,heading:E,status:o.ais.status,aisClass:o.ais.class,type:o.type,iconHref:R,iconScale:k,navState:this.isVesselLike(o)?o.navState:void 0,sog:this.isVesselLike(o)?o.speedOverGround:void 0,cog:f.trackCog??null,className:S});}return V}renderVectors(e,t,i,s,r,a){if(!this.vectorsLayer||!this.ownShipLayer)return;let n=r.showCogVectors??true,h=Math.max(6,i*.04),g=(r.cogVectorsMinutes??5)*60,M=h*.8,b=[],V=[];for(let v of e)if(this.isVesselLike(v.raw)&&!this.isStationaryNavState(v.raw.navState)&&n&&typeof v.sog=="number"&&typeof v.cog=="number"){let o=this.wrapDegrees(v.cog-s),_=this.offsetPoint(v.x,v.y,o,M),f=v.sog*g/1852,R=Math.max(0,f/t*i-M);if(R<=0)continue;let k=this.offsetPoint(_.x,_.y,o,R),L=this.resolveTargetVectorStroke(v.raw);b.push({id:v.id,x1:_.x,y1:_.y,x2:k.x,y2:k.y,className:v.className,stroke:L});}if(r.showSelf??true){let v=this.toDegreesIfRadians(a.courseOverGroundTrue),o=a.speedOverGround;if(v!==null&&typeof o=="number"){let _=this.wrapDegrees(v-s),f=this.offsetPoint(0,0,_,M),R=o*g/1852,k=Math.max(0,R/t*i-M);if(k<=0)return;let L=this.offsetPoint(f.x,f.y,_,k);V.push({id:"ownship",x1:f.x,y1:f.y,x2:L.x,y2:L.y,className:"ownship-vector",stroke:"var(--kip-orange-color)"});}}this.renderVectorLines(this.vectorsLayer,"motion-vector",b),this.renderVectorLines(this.ownShipLayer,"ownship-vector",V);}renderVectorLines(e,t,i){let s=e.selectAll(`line.${t}`).data(i,a=>a.id);s.enter().append("line").attr("class",a=>`${t} ${a.className}`).merge(s).attr("x1",a=>a.x1).attr("y1",a=>a.y1).attr("x2",a=>a.x2).attr("y2",a=>a.y2).style("stroke",a=>a.stroke??"#50505f").style("stroke-width",2).style("opacity",1).style("stroke-dasharray","15, 7"),s.exit().remove();let r=e.selectAll(`circle.${t}-tip`).data(i,a=>a.id);r.enter().append("circle").attr("class",a=>`${t}-tip ${a.className}`).merge(r).attr("cx",a=>a.x2).attr("cy",a=>a.y2).attr("r",2.5).style("fill",a=>a.stroke??"#50505f").style("stroke",a=>a.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),s=this.targetsLayer.selectAll("g.target").data(e,n=>n.id),r=s.enter().append("g").on("click",(n,h)=>{n.stopPropagation(),this.handleTargetClick(n,h);});r.append("image").attr("class","target-icon"),r.append("title");let a=r.merge(s);a.attr("transform",n=>`translate(${n.x}, ${n.y}) rotate(${n.heading})`).attr("class",n=>`target ${n.className}`),a.select("image.target-icon").attr("href",n=>n.iconHref??null).attr("xlink:href",n=>n.iconHref??null).attr("display",n=>n.iconHref?null:"none").attr("width",n=>i*n.iconScale).attr("height",n=>i*n.iconScale).attr("x",n=>-(i*n.iconScale)/2).attr("y",n=>-(i*n.iconScale)/2),a.select("title").text(n=>`${n.raw.name??n.raw.mmsi??"AIS Target"}`),s.exit().remove();}renderSelected(e,t){if(!this.selectedLayer)return;let i=e.filter(g=>g.id===this.selectedId()),s=this.resolveTargetBaseSize(t),r=s*1.4,a=Math.min(r,Math.max(4,s*.6)),n=this.buildCornerBoxPath(r,a),h=this.selectedLayer.selectAll("path.selected-ring").data(i,g=>g.id);h.enter().append("path").attr("class","selected-ring").merge(h).attr("transform",g=>`translate(${g.x}, ${g.y})`).attr("d",n),h.exit().remove();}resolveTargetBaseSize(e){let t=Math.max(.2,e);return l.TARGET_ICON_SIZE_PX/t}resolveOwnShipBaseSize(e){let t=Math.max(.2,e);return l.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);let i=this.snapshotAisTrack(e);this.dialog.openAisDetailDialog({title:this.buildTargetTitle(i),iconHref:t??void 0,component:"ais-target",componentType:cn,payload:{target:i}}).subscribe();}snapshotAisTrack(e){return structuredClone(e)}resolveMenuItems(e,t){return this.findTargetsNearEvent(e,t).map(s=>({id:s.id,label:this.buildTargetMenuLabel(s.raw),iconHref:s.iconHref,target:s.raw}))}findTargetsNearEvent(e,t){let i=this.lastRenderTargets.length?this.lastRenderTargets:[t],s=this.eventToRadarPoint(e);if(!s)return [t];let r=this.hitRadiusPx/this.lastRenderScale,a=i.map((n,h)=>{let g=n.x-s.x,M=n.y-s.y,b=Math.hypot(g,M);return {candidate:n,distance:b,index:h}}).filter(n=>n.distance<=r).sort((n,h)=>n.distance-h.distance||n.index-h.index).map(n=>n.candidate);return a.length?a:[t]}eventToRadarPoint(e){if(!this.lastRenderSize)return null;let s=this.svgRef().nativeElement.getBoundingClientRect(),r=e.clientX-s.left,a=e.clientY-s.top,n=(r-s.width/2)/this.lastRenderScale,h=(a-s.height/2)/this.lastRenderScale;return {x:n,y:h}}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 s=this.resolveIconScale(e.type),r={href:i?.icon.href??null,scale:s};this.iconCache.set(e.id,{signature:t,icon:r});let a=e.ais.status==="remove"?void 0:e.ais.status;return this.ngZone.runOutsideAngular(()=>{nc({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:a,collisionRiskRating:this.isVesselLike(e)?e.closestApproach?.collisionRiskRating:void 0}).then(n=>{let h=this.iconCache.get(e.id);!h||h.signature!==t||(h.icon={href:n,scale:s},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<qn?"red":i<zn?"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 false;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 true;if(t.vesselTypes.size>0&&this.isVesselLike(e)){let i=this.resolveVesselIconKey(e);if(i&&t.vesselTypes.has(i))return true}return false}isNoCollisionRisk(e){let t=e.closestApproach?.collisionRiskRating;if(!Object.prototype.hasOwnProperty.call(e.closestApproach??{},"collisionRiskRating"))return false;if(t==null)return true;let i=typeof t=="number"?t:Number(t);return Number.isFinite(i)?i>=zn:true}resolveVesselIconKey(e){if(!this.isVesselLike(e))return null;let t=pa({mmsi:e.mmsi??e.id??"",type:e.type,aisShipTypeId:e.design?.aisShipType?.id});return t.startsWith("vessel/")?t:null}polarToCartesian(e,t,i,s){let r=e*Math.PI/180,a=t/i*s;return {x:a*Math.sin(r),y:-a*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,s){let r=i*Math.PI/180;return {x:e+s*Math.sin(r),y:t-s*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 false;let t=e.trim().toLowerCase().replace(/\s+/g," ");if(!t.length)return false;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,s=Math.min(Math.max(t,0),i);return [`M ${-i} ${-i} h ${s}`,`M ${-i} ${-i} v ${s}`,`M ${i} ${-i} h ${-s}`,`M ${i} ${-i} v ${s}`,`M ${-i} ${i} h ${s}`,`M ${-i} ${i} v ${-s}`,`M ${i} ${i} h ${-s}`,`M ${i} ${i} v ${-s}`].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)),s=Math.min(1,i/200),r=this.shortestAngleDelta(this.viewRotationSmoothed,e);return this.viewRotationSmoothed=this.wrapDegrees(this.viewRotationSmoothed+r*s),this.lastRotationAt=t,this.viewRotationSmoothed}toDegreesIfRadians(e){return typeof e!="number"||!Number.isFinite(e)?null:this.units.convertToUnit("deg",e)}distanceNm(e,t){let s=e.latitude*Math.PI/180,r=t.latitude*Math.PI/180,a=(t.latitude-e.latitude)*Math.PI/180,n=(t.longitude-e.longitude)*Math.PI/180,h=Math.sin(a/2),g=Math.sin(n/2),M=h*h+Math.cos(s)*Math.cos(r)*g*g;return 6371e3*(2*Math.atan2(Math.sqrt(M),Math.sqrt(1-M)))/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||l)};static \u0275cmp=JD({type:l,selectors:[["widget-ais-radar"]],viewQuery:function(t,i){t&1&&eg(i.svgRef,nt,5)(i.menuAnchorRef,rt,5)(i.menuTrigger,at,5),t&2&&Kw(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&&(Pi(0,"div",5),Qh("kipResize",function(r){return i.onResized(r)}),Pi(1,"button",6),Qh("click",function(){return i.toggleViewMode()}),_w(2,lt,4,0,":svg:svg",7)(3,ct,2,0,":svg:svg",7),ul(),Pi(4,"button",8),Qh("click",function(){return i.incrementRange()}),Pi(5,"mat-icon"),TT(6,"add"),ul()(),Pi(7,"button",9),Qh("click",function(){return i.decrementRange()}),Pi(8,"mat-icon"),TT(9,"remove"),ul()(),Pi(10,"button",10)(11,"mat-icon"),TT(12,"filter_list"),ul()(),_w(13,dt,3,2,"button",11),wd(),$h(14,"svg",12,0),Td(),$h(16,"button",13,1),ul(),Pi(19,"mat-menu",14,2),Qh("closed",function(){return i.resetTargetMenuState()}),xh(21,ut,2,0,"ng-template",15),ul(),Pi(22,"mat-menu",null,3),xh(24,mt,27,5,"ng-template",15),ul(),Pi(25,"mat-menu",null,4),xh(27,ft,2,0,"ng-template",15),ul(),_w(28,pt,1,0,"div",16)),t&2){let s=Jw(20),r=Jw(23);EE(),Bh("matTooltip",i.effectiveViewMode()==="north-up"?"Change to North-Up mode":"Change to Course-Up mode"),Hh("aria-label",i.effectiveViewMode()==="north-up"?"North up mode":"Course up mode"),EE(),Mw(i.effectiveViewMode()==="north-up"?2:3),EE(8),sg("is-active",i.hasActiveFilters()),Bh("matMenuTriggerFor",r),EE(3),Mw(i.hasCollisionRiskData()?13:-1),EE(3),Bh("matMenuTriggerFor",s),EE(12),Mw(i.dashboard.isDashboardStatic()?-1:28);}},dependencies:[u,Op,Rp,yt,wt,Ht,R,ee,Nt,Lt,zt,mt$1],encapsulation:2})}return l})();export{Xt as WidgetAisRadarComponent};