@mxtommy/kip 4.8.0 → 4.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +19 -17
  3. package/package.json +24 -21
  4. package/plugin/history-series.service.js +3 -0
  5. package/plugin/index.js +1 -1
  6. package/plugin/sqlite-history-storage.service.js +4 -2
  7. package/plugin/src/history-series.service.js +634 -0
  8. package/plugin/src/index.js +1322 -0
  9. package/plugin/src/kip-series-contract.js +31 -0
  10. package/plugin/src/openApi.json +855 -0
  11. package/plugin/src/sqlite-history-storage.service.js +1122 -0
  12. package/public/3rdpartylicenses.txt +569 -727
  13. package/public/assets/help-docs/chartplotter.md +1 -1
  14. package/public/assets/help-docs/history-api.md +69 -71
  15. package/public/assets/help-docs/menu.json +25 -7
  16. package/public/assets/help-docs/time-series.md +81 -0
  17. package/public/assets/help-docs/welcome.md +1 -1
  18. package/public/chunk-00hwknVI.js +1 -0
  19. package/public/chunk-5U8d2Ygo.js +14 -0
  20. package/public/chunk-AANk-NXH.js +1015 -0
  21. package/public/chunk-B6bEhzNR.js +1 -0
  22. package/public/chunk-B82ADJSs.js +1 -0
  23. package/public/chunk-BJz7Ij9E.js +1 -0
  24. package/public/chunk-BKj60jdq.js +1 -0
  25. package/public/chunk-BOAD0N2a.js +2 -0
  26. package/public/chunk-BQr-tSkv.js +1 -0
  27. package/public/chunk-BX6skw5k.js +1 -0
  28. package/public/chunk-BdokyhBM.js +1 -0
  29. package/public/chunk-Blokg6Ds.js +1 -0
  30. package/public/chunk-BoNDCNGE.js +1 -0
  31. package/public/chunk-Bp0MQwPM.js +1 -0
  32. package/public/chunk-BwOIef42.js +1 -0
  33. package/public/chunk-By8ZVvDx.js +2 -0
  34. package/public/chunk-C2VQxCXa.js +1 -0
  35. package/public/chunk-C6UXF7BI.js +1 -0
  36. package/public/chunk-CA6RRaxd.js +1 -0
  37. package/public/chunk-CIlfzV9R.js +1 -0
  38. package/public/chunk-CL2xiH57.js +1 -0
  39. package/public/chunk-CNMFlw_H.js +1 -0
  40. package/public/chunk-CNNTuNlM.js +1 -0
  41. package/public/chunk-CQNVyz8q.js +1 -0
  42. package/public/chunk-CXvG8mMq.js +1 -0
  43. package/public/chunk-CaD3zVfK.js +1 -0
  44. package/public/chunk-CkXTl3su.js +1 -0
  45. package/public/chunk-CpMCBDvH.js +1 -0
  46. package/public/chunk-CpuB_ZZz.js +2 -0
  47. package/public/chunk-CrBxxZCe.js +1 -0
  48. package/public/chunk-CwSa_BNV.js +1 -0
  49. package/public/chunk-D4xZ2tGB.js +39 -0
  50. package/public/chunk-DDqeRiB0.js +1 -0
  51. package/public/chunk-DE4ylhpq.js +1 -0
  52. package/public/chunk-DNS-qsFC.js +1 -0
  53. package/public/chunk-DQnoPLyC.js +1 -0
  54. package/public/chunk-DWLISAZi.js +1 -0
  55. package/public/chunk-DXkKj21H.js +1 -0
  56. package/public/chunk-DchvLV_Y.js +1 -0
  57. package/public/chunk-DjZgzSiH.js +1 -0
  58. package/public/chunk-DumLX5k_.js +1 -0
  59. package/public/chunk-Dxlia2NE.js +1 -0
  60. package/public/chunk-DzTTqoF_.js +1 -0
  61. package/public/chunk-H9_eqTYx.js +1 -0
  62. package/public/chunk-Ii9n-oiL.js +1 -0
  63. package/public/chunk-JbEkcxJm.js +2 -0
  64. package/public/chunk-MjWuPUhu.js +1 -0
  65. package/public/chunk-PheXEqie.js +1 -0
  66. package/public/chunk-TakPRI3t.js +2 -0
  67. package/public/chunk-VgxMqRPk.js +3 -0
  68. package/public/chunk-dgaOX1wC.js +382 -0
  69. package/public/chunk-hd2_AKwt.js +1 -0
  70. package/public/chunk-nu4vZg-z.js +1 -0
  71. package/public/chunk-sNakMDHi.js +1 -0
  72. package/public/chunk-tAiV3ARh.js +1 -0
  73. package/public/chunk-y1imvaA-.js +1 -0
  74. package/public/index.html +4 -4
  75. package/public/main-BAV5VDOD.js +7109 -0
  76. package/public/polyfills-5MJXXCNC.js +1 -0
  77. package/public/styles-JZSMCSRO.css +1 -0
  78. package/public/assets/help-docs/widget-historical-series.md +0 -110
  79. package/public/chunk-2TP7C66X.js +0 -5
  80. package/public/chunk-3SJSLBCV.js +0 -6
  81. package/public/chunk-5SMHTIVS.js +0 -50
  82. package/public/chunk-6ISGIPNP.js +0 -1
  83. package/public/chunk-6ZR3M3IQ.js +0 -3
  84. package/public/chunk-ACY7HYMZ.js +0 -4
  85. package/public/chunk-C23GLDFH.js +0 -62
  86. package/public/chunk-CB4E7PPA.js +0 -4
  87. package/public/chunk-DNM5XUIF.js +0 -1
  88. package/public/chunk-GSM7FZE2.js +0 -2
  89. package/public/chunk-HF7V6XFA.js +0 -2
  90. package/public/chunk-HUCDJ6CS.js +0 -10
  91. package/public/chunk-ILQQCGMJ.js +0 -5
  92. package/public/chunk-IXUKD73N.js +0 -5
  93. package/public/chunk-JMZYPL54.js +0 -2
  94. package/public/chunk-KG4C6HZC.js +0 -1
  95. package/public/chunk-LEY6MANN.js +0 -16
  96. package/public/chunk-NS2OV2OW.js +0 -9
  97. package/public/chunk-O5BTKN5D.js +0 -1
  98. package/public/chunk-Q32FSCUX.js +0 -1
  99. package/public/chunk-SHJMXSDM.js +0 -1
  100. package/public/chunk-T4VTC6GW.js +0 -1
  101. package/public/chunk-VFJD3XKT.js +0 -1
  102. package/public/chunk-VFZSH4TC.js +0 -1
  103. package/public/chunk-W6MCE3GH.js +0 -6
  104. package/public/main-UBENKC2D.js +0 -1
  105. package/public/polyfills-BWA36QKG.js +0 -1
  106. package/public/scripts-M6PHZBML.js +0 -14
  107. package/public/styles-DYEO23GZ.css +0 -1
@@ -0,0 +1 @@
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};
package/public/index.html CHANGED
@@ -8,8 +8,8 @@
8
8
  <link rel="icon" type="image/png" sizes="16x16" href="assets/favicon-16x16.png">
9
9
  <link rel="icon" type="image/x-icon" size="any" href="assets/favicon.ico">
10
10
  <link rel="manifest" href="manifest.json" crossorigin="use-credentials">
11
- <script src="assets/tween-min.js"></script>
12
- <script src="assets/steelseries-min.js"></script>
11
+ <script defer src="assets/tween-min.js"></script>
12
+ <script defer src="assets/steelseries-min.js"></script>
13
13
  <link rel="apple-touch-icon" href="assets/apple-icon-180.png">
14
14
  <meta name="apple-mobile-web-app-capable" content="yes">
15
15
  <meta name="mobile-web-app-capable" content="yes">
@@ -43,7 +43,7 @@
43
43
  <link rel="apple-touch-startup-image" href="assets/apple-splash-1334-750.jpg" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)">
44
44
  <link rel="apple-touch-startup-image" href="assets/apple-splash-640-1136.jpg" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
45
45
  <link rel="apple-touch-startup-image" href="assets/apple-splash-1136-640.jpg" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)">
46
- <style>@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP-QPSNQEDD.woff2") format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP-XWLWMQVU.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP-32PLHKPQ.woff2") format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP-ITB7NUJC.woff2") format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP-OG5AHRIX.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP-JKBSJZY3.woff2") format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ-PWGJWDFE.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz-PRJ7OQMU.woff2") format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz-DRL4U32S.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz-Z72STTMG.woff2") format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz-PPTELUJT.woff2") format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz-KZD6JQRT.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz-HW6RMPJ3.woff2") format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu4mxKKTU1Kg-SNGEW7FX.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP-36ULTGLY.woff2") format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP-ILKS6RVC.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP-U3JTBV4H.woff2") format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP-UW3XWY7P.woff2") format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP-2EL65J2O.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP-5NJLO2HW.woff2") format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ-MJ3CERJ6.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--mat-sys-background:#191c1d;--kip-nightModeBrightness:1;--kip-widget-card-background-color:#000000;--kip-widget-card-border-color:#252525;--kip-widget-card-border-style:solid;--kip-widget-card-border-width:2px;--kip-blue-color:#3298ff;--kip-blue-dim-color:rgba(53, 154, 255, .7764705882);--kip-blue-dimmer-color:rgba(6, 59, 113, .4705882353);--kip-green-color:#00d000;--kip-green-dim-color:rgba(0, 208, 0, .7137254902);--kip-green-dimmer-color:rgba(0, 104, 0, .4705882353);--kip-purple-color:#A020F0;--kip-purple-dim-color:rgba(160, 32, 240, .7137254902);--kip-purple-dimmer-color:rgba(74, 15, 110, .4705882353);--kip-yellow-color:#ffdf00;--kip-yellow-dim-color:rgba(255, 223, 0, .7137254902);--kip-yellow-dimmer-color:rgba(114, 110, 0, .4705882353);--kip-pink-color:#FC0FC0;--kip-pink-dim-color:rgba(252, 15, 192, .7137254902);--kip-pink-dimmer-color:rgba(109, 7, 83, .4705882353);--kip-orange-color:#ff9100;--kip-orange-dim-color:rgba(255, 145, 0, .7137254902);--kip-orange-dimmer-color:rgba(113, 74, 0, .4705882353);--kip-contrast-color:#FFFFFF;--kip-contrast-dim-color:rgba(255, 255, 255, .7137254902);--kip-contrast-dimmer-color:rgba(255, 255, 255, .1607843137);--kip-grey-color:#B5B5B5;--kip-grey-dim-color:rgba(181, 181, 181, .7137254902);--kip-grey-dimmer-color:#1a1a1a;--kip-port-color:#8F0000;--kip-starboard-color:#008700;--kip-zone-nominal-color:#0164FA;--kip-zone-alert-color:#ffff60;--kip-zone-warn-color:#ff8d41;--kip-zone-alarm-color:#dd0000;--kip-zone-emergency-color:#ff0000}html{--mat-sys-background:#101415;--mat-sys-error:#ffb4ab;--mat-sys-error-container:#93000a;--mat-sys-inverse-on-surface:#2e3132;--mat-sys-inverse-primary:#0058c9;--mat-sys-inverse-surface:#e1e3e3;--mat-sys-on-background:#e1e3e3;--mat-sys-on-error:#690005;--mat-sys-on-error-container:#ffdad6;--mat-sys-on-primary:#002d6d;--mat-sys-on-primary-container:#d9e2ff;--mat-sys-on-primary-fixed:#001944;--mat-sys-on-primary-fixed-variant:#00429a;--mat-sys-on-secondary:#002e6b;--mat-sys-on-secondary-container:#d8e2ff;--mat-sys-on-secondary-fixed:#001a42;--mat-sys-on-secondary-fixed-variant:#13448f;--mat-sys-on-surface:#e1e3e3;--mat-sys-on-surface-variant:#dbe4e6;--mat-sys-on-tertiary:#3d2f00;--mat-sys-on-tertiary-container:#ffe08b;--mat-sys-on-tertiary-fixed:#241a00;--mat-sys-on-tertiary-fixed-variant:#584400;--mat-sys-outline:#899294;--mat-sys-outline-variant:#3f484a;--mat-sys-primary:#afc6ff;--mat-sys-primary-container:#00429a;--mat-sys-primary-fixed:#d9e2ff;--mat-sys-primary-fixed-dim:#afc6ff;--mat-sys-scrim:#000000;--mat-sys-secondary:#aec6ff;--mat-sys-secondary-container:#13448f;--mat-sys-secondary-fixed:#d8e2ff;--mat-sys-secondary-fixed-dim:#aec6ff;--mat-sys-shadow:#000000;--mat-sys-surface:#101415;--mat-sys-surface-bright:#363a3a;--mat-sys-surface-container:#1d2021;--mat-sys-surface-container-high:#272b2b;--mat-sys-surface-container-highest:#323536;--mat-sys-surface-container-low:#191c1d;--mat-sys-surface-container-lowest:#0b0f0f;--mat-sys-surface-dim:#101415;--mat-sys-surface-tint:#afc6ff;--mat-sys-surface-variant:#3f484a;--mat-sys-tertiary:#eec12c;--mat-sys-tertiary-container:#584400;--mat-sys-tertiary-fixed:#ffe08b;--mat-sys-tertiary-fixed-dim:#eec12c;--mat-sys-neutral-variant20:#293234;--mat-sys-neutral10:#191c1d;--mat-sys-level0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large:400 1rem / 1.5rem Roboto;--mat-sys-body-large-font:Roboto;--mat-sys-body-large-line-height:1.5rem;--mat-sys-body-large-size:1rem;--mat-sys-body-large-tracking:.031rem;--mat-sys-body-large-weight:400;--mat-sys-body-medium:400 .875rem / 1.25rem Roboto;--mat-sys-body-medium-font:Roboto;--mat-sys-body-medium-line-height:1.25rem;--mat-sys-body-medium-size:.875rem;--mat-sys-body-medium-tracking:.016rem;--mat-sys-body-medium-weight:400;--mat-sys-body-small:400 .75rem / 1rem Roboto;--mat-sys-body-small-font:Roboto;--mat-sys-body-small-line-height:1rem;--mat-sys-body-small-size:.75rem;--mat-sys-body-small-tracking:.025rem;--mat-sys-body-small-weight:400;--mat-sys-display-large:400 3.562rem / 4rem Roboto;--mat-sys-display-large-font:Roboto;--mat-sys-display-large-line-height:4rem;--mat-sys-display-large-size:3.562rem;--mat-sys-display-large-tracking:-.016rem;--mat-sys-display-large-weight:400;--mat-sys-display-medium:400 2.812rem / 3.25rem Roboto;--mat-sys-display-medium-font:Roboto;--mat-sys-display-medium-line-height:3.25rem;--mat-sys-display-medium-size:2.812rem;--mat-sys-display-medium-tracking:0;--mat-sys-display-medium-weight:400;--mat-sys-display-small:400 2.25rem / 2.75rem Roboto;--mat-sys-display-small-font:Roboto;--mat-sys-display-small-line-height:2.75rem;--mat-sys-display-small-size:2.25rem;--mat-sys-display-small-tracking:0;--mat-sys-display-small-weight:400;--mat-sys-headline-large:400 2rem / 2.5rem Roboto;--mat-sys-headline-large-font:Roboto;--mat-sys-headline-large-line-height:2.5rem;--mat-sys-headline-large-size:2rem;--mat-sys-headline-large-tracking:0;--mat-sys-headline-large-weight:400;--mat-sys-headline-medium:400 1.75rem / 2.25rem Roboto;--mat-sys-headline-medium-font:Roboto;--mat-sys-headline-medium-line-height:2.25rem;--mat-sys-headline-medium-size:1.75rem;--mat-sys-headline-medium-tracking:0;--mat-sys-headline-medium-weight:400;--mat-sys-headline-small:400 1.5rem / 2rem Roboto;--mat-sys-headline-small-font:Roboto;--mat-sys-headline-small-line-height:2rem;--mat-sys-headline-small-size:1.5rem;--mat-sys-headline-small-tracking:0;--mat-sys-headline-small-weight:400;--mat-sys-label-large:500 .875rem / 1.25rem Roboto;--mat-sys-label-large-font:Roboto;--mat-sys-label-large-line-height:1.25rem;--mat-sys-label-large-size:.875rem;--mat-sys-label-large-tracking:.006rem;--mat-sys-label-large-weight:500;--mat-sys-label-large-weight-prominent:700;--mat-sys-label-medium:500 .75rem / 1rem Roboto;--mat-sys-label-medium-font:Roboto;--mat-sys-label-medium-line-height:1rem;--mat-sys-label-medium-size:.75rem;--mat-sys-label-medium-tracking:.031rem;--mat-sys-label-medium-weight:500;--mat-sys-label-medium-weight-prominent:700;--mat-sys-label-small:500 .688rem / 1rem Roboto;--mat-sys-label-small-font:Roboto;--mat-sys-label-small-line-height:1rem;--mat-sys-label-small-size:.688rem;--mat-sys-label-small-tracking:.031rem;--mat-sys-label-small-weight:500;--mat-sys-title-large:400 1.375rem / 1.75rem Roboto;--mat-sys-title-large-font:Roboto;--mat-sys-title-large-line-height:1.75rem;--mat-sys-title-large-size:1.375rem;--mat-sys-title-large-tracking:0;--mat-sys-title-large-weight:400;--mat-sys-title-medium:500 1rem / 1.5rem Roboto;--mat-sys-title-medium-font:Roboto;--mat-sys-title-medium-line-height:1.5rem;--mat-sys-title-medium-size:1rem;--mat-sys-title-medium-tracking:.009rem;--mat-sys-title-medium-weight:500;--mat-sys-title-small:500 .875rem / 1.25rem Roboto;--mat-sys-title-small-font:Roboto;--mat-sys-title-small-line-height:1.25rem;--mat-sys-title-small-size:.875rem;--mat-sys-title-small-tracking:.006rem;--mat-sys-title-small-weight:500;--mat-sys-corner-extra-large:28px;--mat-sys-corner-extra-large-top:28px 28px 0 0;--mat-sys-corner-extra-small:4px;--mat-sys-corner-extra-small-top:4px 4px 0 0;--mat-sys-corner-full:9999px;--mat-sys-corner-large:16px;--mat-sys-corner-large-end:0 16px 16px 0;--mat-sys-corner-large-start:16px 0 0 16px;--mat-sys-corner-large-top:16px 16px 0 0;--mat-sys-corner-medium:12px;--mat-sys-corner-none:0;--mat-sys-corner-small:8px;--mat-sys-dragged-state-layer-opacity:.16;--mat-sys-focus-state-layer-opacity:.12;--mat-sys-hover-state-layer-opacity:.08;--mat-sys-pressed-state-layer-opacity:.12}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}html,body{height:100%;overscroll-behavior-y:none;user-select:none;-webkit-user-select:none;-ms-user-select:none;overflow-x:hidden}.app-shell{height:100%;overflow:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}body{font-family:Roboto,Helvetica Neue,sans-serif;background:var(--mat-sys-surface);color:var(--mat-sys-on-surface);margin:0;touch-action:none}#app-filter-wrapper{filter:brightness(var(--kip-nightModeBrightness)) var(--kip-nightModeFilters);-webkit-backdrop-filter:brightness(var(--kip-nightModeBrightness));backdrop-filter:brightness(var(--kip-nightModeBrightness));transition:filter .3s ease;position:relative;z-index:1300}.loader-container{height:100%;width:100%;background-color:var(--mat-sys-background);display:flex;align-items:center;justify-content:center}#loader{height:175px;width:175px;position:relative}#loader .dot{height:100%;inset:0;margin:auto;position:absolute;width:87.5px}#loader .dot:before{border-radius:100%;content:"";height:87.5px;left:0;position:absolute;right:0;top:0;transform:scale(0);width:87.5px}#loader .dot:nth-child(7n+1){transform:rotate(45deg)}#loader .dot:nth-child(7n+1):before{animation:.8s linear .1s normal none infinite running load;background:#e5ab13 none repeat scroll 0 0}#loader .dot:nth-child(7n+2){transform:rotate(90deg)}#loader .dot:nth-child(7n+2):before{animation:.8s linear .2s normal none infinite running load;background:#f0ca31 none repeat scroll 0 0}#loader .dot:nth-child(7n+3){transform:rotate(135deg)}#loader .dot:nth-child(7n+3):before{animation:.8s linear .3s normal none infinite running load;background:#92c7e9 none repeat scroll 0 0}#loader .dot:nth-child(7n+4){transform:rotate(180deg)}#loader .dot:nth-child(7n+4):before{animation:.8s linear .4s normal none infinite running load;background:#63afdf none repeat scroll 0 0}#loader .dot:nth-child(7n+5){transform:rotate(225deg)}#loader .dot:nth-child(7n+5):before{animation:.8s linear .5s normal none infinite running load;background:#3586ca none repeat scroll 0 0}#loader .dot:nth-child(7n+6){transform:rotate(270deg)}#loader .dot:nth-child(7n+6):before{animation:.8s linear .6s normal none infinite running load;background:#d52626 none repeat scroll 0 0}#loader .dot:nth-child(7n+7){transform:rotate(315deg)}#loader .dot:nth-child(7n+7):before{animation:.8s linear .7s normal none infinite running load;background:#e26767 none repeat scroll 0 0}#loader .dot:nth-child(7n+8){transform:rotate(360deg)}#loader .dot:nth-child(7n+8):before{animation:.8s linear .8s normal none infinite running load;background:#f8e598 none repeat scroll 0 0}#loader .loading{background-position:50% 50%;background-repeat:no-repeat;bottom:-40px;height:20px;left:0;position:absolute;right:0;width:180px}@keyframes load{to{opacity:0;transform:scale(1)}}</style><link rel="stylesheet" href="styles-DYEO23GZ.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-DYEO23GZ.css"></noscript></head>
46
+ <style>@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP-QPSNQEDD.woff2") format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP-XWLWMQVU.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP-32PLHKPQ.woff2") format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP-ITB7NUJC.woff2") format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP-OG5AHRIX.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP-JKBSJZY3.woff2") format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-display:swap;src:local("Roboto Light"),local("Roboto-Light"),url("./media/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ-PWGJWDFE.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz-PRJ7OQMU.woff2") format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz-DRL4U32S.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz-Z72STTMG.woff2") format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz-PPTELUJT.woff2") format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz-KZD6JQRT.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz-HW6RMPJ3.woff2") format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url("./media/KFOmCnqEu92Fr1Mu4mxKKTU1Kg-SNGEW7FX.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP-36ULTGLY.woff2") format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP-ILKS6RVC.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP-U3JTBV4H.woff2") format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP-UW3XWY7P.woff2") format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP-2EL65J2O.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP-5NJLO2HW.woff2") format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:local("Roboto Medium"),local("Roboto-Medium"),url("./media/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ-MJ3CERJ6.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--mat-sys-background:#191c1d;--kip-nightModeBrightness:1;--kip-widget-card-background-color:#000000;--kip-widget-card-border-color:#252525;--kip-widget-card-border-style:solid;--kip-widget-card-border-width:2px;--kip-blue-color:#3298ff;--kip-blue-dim-color:rgba(53, 154, 255, .7764705882);--kip-blue-dimmer-color:rgba(6, 59, 113, .4705882353);--kip-green-color:#00d000;--kip-green-dim-color:rgba(0, 208, 0, .7137254902);--kip-green-dimmer-color:rgba(0, 104, 0, .4705882353);--kip-purple-color:#A020F0;--kip-purple-dim-color:rgba(160, 32, 240, .7137254902);--kip-purple-dimmer-color:rgba(74, 15, 110, .4705882353);--kip-yellow-color:#ffdf00;--kip-yellow-dim-color:rgba(255, 223, 0, .7137254902);--kip-yellow-dimmer-color:rgba(114, 110, 0, .4705882353);--kip-pink-color:#FC0FC0;--kip-pink-dim-color:rgba(252, 15, 192, .7137254902);--kip-pink-dimmer-color:rgba(109, 7, 83, .4705882353);--kip-orange-color:#ff9100;--kip-orange-dim-color:rgba(255, 145, 0, .7137254902);--kip-orange-dimmer-color:rgba(113, 74, 0, .4705882353);--kip-contrast-color:#FFFFFF;--kip-contrast-dim-color:rgba(255, 255, 255, .7137254902);--kip-contrast-dimmer-color:rgba(255, 255, 255, .1607843137);--kip-grey-color:#B5B5B5;--kip-grey-dim-color:rgba(181, 181, 181, .7137254902);--kip-grey-dimmer-color:#1a1a1a;--kip-port-color:#8F0000;--kip-starboard-color:#008700;--kip-zone-nominal-color:#0164FA;--kip-zone-alert-color:#ffff60;--kip-zone-warn-color:#ff8d41;--kip-zone-alarm-color:#dd0000;--kip-zone-emergency-color:#ff0000}html{--mat-sys-background:#101415;--mat-sys-error:#ffb4ab;--mat-sys-error-container:#93000a;--mat-sys-inverse-on-surface:#2e3132;--mat-sys-inverse-primary:#0058c9;--mat-sys-inverse-surface:#e1e3e3;--mat-sys-on-background:#e1e3e3;--mat-sys-on-error:#690005;--mat-sys-on-error-container:#ffdad6;--mat-sys-on-primary:#002d6d;--mat-sys-on-primary-container:#d9e2ff;--mat-sys-on-primary-fixed:#001944;--mat-sys-on-primary-fixed-variant:#00429a;--mat-sys-on-secondary:#002e6b;--mat-sys-on-secondary-container:#d8e2ff;--mat-sys-on-secondary-fixed:#001a42;--mat-sys-on-secondary-fixed-variant:#13448f;--mat-sys-on-surface:#e1e3e3;--mat-sys-on-surface-variant:#dbe4e6;--mat-sys-on-tertiary:#3d2f00;--mat-sys-on-tertiary-container:#ffe08b;--mat-sys-on-tertiary-fixed:#241a00;--mat-sys-on-tertiary-fixed-variant:#584400;--mat-sys-outline:#899294;--mat-sys-outline-variant:#3f484a;--mat-sys-primary:#afc6ff;--mat-sys-primary-container:#00429a;--mat-sys-primary-fixed:#d9e2ff;--mat-sys-primary-fixed-dim:#afc6ff;--mat-sys-scrim:#000000;--mat-sys-secondary:#aec6ff;--mat-sys-secondary-container:#13448f;--mat-sys-secondary-fixed:#d8e2ff;--mat-sys-secondary-fixed-dim:#aec6ff;--mat-sys-shadow:#000000;--mat-sys-surface:#101415;--mat-sys-surface-bright:#363a3a;--mat-sys-surface-container:#1d2021;--mat-sys-surface-container-high:#272b2b;--mat-sys-surface-container-highest:#323536;--mat-sys-surface-container-low:#191c1d;--mat-sys-surface-container-lowest:#0b0f0f;--mat-sys-surface-dim:#101415;--mat-sys-surface-tint:#afc6ff;--mat-sys-surface-variant:#3f484a;--mat-sys-tertiary:#eec12c;--mat-sys-tertiary-container:#584400;--mat-sys-tertiary-fixed:#ffe08b;--mat-sys-tertiary-fixed-dim:#eec12c;--mat-sys-neutral-variant20:#293234;--mat-sys-neutral10:#191c1d;--mat-sys-level0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large:400 1rem / 1.5rem Roboto;--mat-sys-body-large-font:Roboto;--mat-sys-body-large-line-height:1.5rem;--mat-sys-body-large-size:1rem;--mat-sys-body-large-tracking:.031rem;--mat-sys-body-large-weight:400;--mat-sys-body-medium:400 .875rem / 1.25rem Roboto;--mat-sys-body-medium-font:Roboto;--mat-sys-body-medium-line-height:1.25rem;--mat-sys-body-medium-size:.875rem;--mat-sys-body-medium-tracking:.016rem;--mat-sys-body-medium-weight:400;--mat-sys-body-small:400 .75rem / 1rem Roboto;--mat-sys-body-small-font:Roboto;--mat-sys-body-small-line-height:1rem;--mat-sys-body-small-size:.75rem;--mat-sys-body-small-tracking:.025rem;--mat-sys-body-small-weight:400;--mat-sys-display-large:400 3.562rem / 4rem Roboto;--mat-sys-display-large-font:Roboto;--mat-sys-display-large-line-height:4rem;--mat-sys-display-large-size:3.562rem;--mat-sys-display-large-tracking:-.016rem;--mat-sys-display-large-weight:400;--mat-sys-display-medium:400 2.812rem / 3.25rem Roboto;--mat-sys-display-medium-font:Roboto;--mat-sys-display-medium-line-height:3.25rem;--mat-sys-display-medium-size:2.812rem;--mat-sys-display-medium-tracking:0;--mat-sys-display-medium-weight:400;--mat-sys-display-small:400 2.25rem / 2.75rem Roboto;--mat-sys-display-small-font:Roboto;--mat-sys-display-small-line-height:2.75rem;--mat-sys-display-small-size:2.25rem;--mat-sys-display-small-tracking:0;--mat-sys-display-small-weight:400;--mat-sys-headline-large:400 2rem / 2.5rem Roboto;--mat-sys-headline-large-font:Roboto;--mat-sys-headline-large-line-height:2.5rem;--mat-sys-headline-large-size:2rem;--mat-sys-headline-large-tracking:0;--mat-sys-headline-large-weight:400;--mat-sys-headline-medium:400 1.75rem / 2.25rem Roboto;--mat-sys-headline-medium-font:Roboto;--mat-sys-headline-medium-line-height:2.25rem;--mat-sys-headline-medium-size:1.75rem;--mat-sys-headline-medium-tracking:0;--mat-sys-headline-medium-weight:400;--mat-sys-headline-small:400 1.5rem / 2rem Roboto;--mat-sys-headline-small-font:Roboto;--mat-sys-headline-small-line-height:2rem;--mat-sys-headline-small-size:1.5rem;--mat-sys-headline-small-tracking:0;--mat-sys-headline-small-weight:400;--mat-sys-label-large:500 .875rem / 1.25rem Roboto;--mat-sys-label-large-font:Roboto;--mat-sys-label-large-line-height:1.25rem;--mat-sys-label-large-size:.875rem;--mat-sys-label-large-tracking:.006rem;--mat-sys-label-large-weight:500;--mat-sys-label-large-weight-prominent:700;--mat-sys-label-medium:500 .75rem / 1rem Roboto;--mat-sys-label-medium-font:Roboto;--mat-sys-label-medium-line-height:1rem;--mat-sys-label-medium-size:.75rem;--mat-sys-label-medium-tracking:.031rem;--mat-sys-label-medium-weight:500;--mat-sys-label-medium-weight-prominent:700;--mat-sys-label-small:500 .688rem / 1rem Roboto;--mat-sys-label-small-font:Roboto;--mat-sys-label-small-line-height:1rem;--mat-sys-label-small-size:.688rem;--mat-sys-label-small-tracking:.031rem;--mat-sys-label-small-weight:500;--mat-sys-title-large:400 1.375rem / 1.75rem Roboto;--mat-sys-title-large-font:Roboto;--mat-sys-title-large-line-height:1.75rem;--mat-sys-title-large-size:1.375rem;--mat-sys-title-large-tracking:0;--mat-sys-title-large-weight:400;--mat-sys-title-medium:500 1rem / 1.5rem Roboto;--mat-sys-title-medium-font:Roboto;--mat-sys-title-medium-line-height:1.5rem;--mat-sys-title-medium-size:1rem;--mat-sys-title-medium-tracking:.009rem;--mat-sys-title-medium-weight:500;--mat-sys-title-small:500 .875rem / 1.25rem Roboto;--mat-sys-title-small-font:Roboto;--mat-sys-title-small-line-height:1.25rem;--mat-sys-title-small-size:.875rem;--mat-sys-title-small-tracking:.006rem;--mat-sys-title-small-weight:500;--mat-sys-corner-extra-large:28px;--mat-sys-corner-extra-large-top:28px 28px 0 0;--mat-sys-corner-extra-small:4px;--mat-sys-corner-extra-small-top:4px 4px 0 0;--mat-sys-corner-full:9999px;--mat-sys-corner-large:16px;--mat-sys-corner-large-end:0 16px 16px 0;--mat-sys-corner-large-start:16px 0 0 16px;--mat-sys-corner-large-top:16px 16px 0 0;--mat-sys-corner-medium:12px;--mat-sys-corner-none:0;--mat-sys-corner-small:8px;--mat-sys-dragged-state-layer-opacity:.16;--mat-sys-focus-state-layer-opacity:.12;--mat-sys-hover-state-layer-opacity:.08;--mat-sys-pressed-state-layer-opacity:.12}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}html,body{height:100%;overscroll-behavior-y:none;user-select:none;-webkit-user-select:none;-ms-user-select:none;overflow-x:hidden}.app-shell{height:100%;overflow:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}body{font-family:Roboto,Helvetica Neue,sans-serif;background:var(--mat-sys-surface);color:var(--mat-sys-on-surface);margin:0;touch-action:none}#app-filter-wrapper{filter:brightness(var(--kip-nightModeBrightness)) var(--kip-nightModeFilters);-webkit-backdrop-filter:brightness(var(--kip-nightModeBrightness));backdrop-filter:brightness(var(--kip-nightModeBrightness));transition:filter .3s ease;position:relative;z-index:1300}.loader-container{height:100%;width:100%;background-color:var(--mat-sys-background);display:flex;align-items:center;justify-content:center}#loader{height:175px;width:175px;position:relative}#loader .dot{height:100%;inset:0;margin:auto;position:absolute;width:87.5px}#loader .dot:before{border-radius:100%;content:"";height:87.5px;left:0;position:absolute;right:0;top:0;transform:scale(0);width:87.5px}#loader .dot:nth-child(7n+1){transform:rotate(45deg)}#loader .dot:nth-child(7n+1):before{animation:.8s linear .1s normal none infinite running load;background:#e5ab13 none repeat scroll 0 0}#loader .dot:nth-child(7n+2){transform:rotate(90deg)}#loader .dot:nth-child(7n+2):before{animation:.8s linear .2s normal none infinite running load;background:#f0ca31 none repeat scroll 0 0}#loader .dot:nth-child(7n+3){transform:rotate(135deg)}#loader .dot:nth-child(7n+3):before{animation:.8s linear .3s normal none infinite running load;background:#92c7e9 none repeat scroll 0 0}#loader .dot:nth-child(7n+4){transform:rotate(180deg)}#loader .dot:nth-child(7n+4):before{animation:.8s linear .4s normal none infinite running load;background:#63afdf none repeat scroll 0 0}#loader .dot:nth-child(7n+5){transform:rotate(225deg)}#loader .dot:nth-child(7n+5):before{animation:.8s linear .5s normal none infinite running load;background:#3586ca none repeat scroll 0 0}#loader .dot:nth-child(7n+6){transform:rotate(270deg)}#loader .dot:nth-child(7n+6):before{animation:.8s linear .6s normal none infinite running load;background:#d52626 none repeat scroll 0 0}#loader .dot:nth-child(7n+7){transform:rotate(315deg)}#loader .dot:nth-child(7n+7):before{animation:.8s linear .7s normal none infinite running load;background:#e26767 none repeat scroll 0 0}#loader .dot:nth-child(7n+8){transform:rotate(360deg)}#loader .dot:nth-child(7n+8):before{animation:.8s linear .8s normal none infinite running load;background:#f8e598 none repeat scroll 0 0}#loader .loading{background-position:50% 50%;background-repeat:no-repeat;bottom:-40px;height:20px;left:0;position:absolute;right:0;width:180px}@keyframes load{to{opacity:0;transform:scale(1)}}</style><link rel="stylesheet" href="styles-JZSMCSRO.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-JZSMCSRO.css"></noscript></head>
47
47
  <body class="mat-typography" id="app-filter-wrapper">
48
48
  <div class="app-shell">
49
49
  <app-root>
@@ -62,5 +62,5 @@
62
62
  </div>
63
63
  </app-root>
64
64
  </div>
65
- <link rel="modulepreload" href="chunk-6ZR3M3IQ.js"><link rel="modulepreload" href="chunk-5SMHTIVS.js"><link rel="modulepreload" href="chunk-DNM5XUIF.js"><link rel="modulepreload" href="chunk-NS2OV2OW.js"><link rel="modulepreload" href="chunk-CB4E7PPA.js"><link rel="modulepreload" href="chunk-SHJMXSDM.js"><link rel="modulepreload" href="chunk-W6MCE3GH.js"><link rel="modulepreload" href="chunk-C23GLDFH.js"><link rel="modulepreload" href="chunk-JMZYPL54.js"><link rel="modulepreload" href="chunk-ACY7HYMZ.js"><script src="polyfills-BWA36QKG.js" type="module"></script><script src="scripts-M6PHZBML.js" defer></script><script src="main-UBENKC2D.js" type="module"></script></body>
65
+ <script src="polyfills-5MJXXCNC.js" type="module"></script><script src="main-BAV5VDOD.js" type="module"></script></body>
66
66
  </html>