sksim
Version:
SKSim: Signal K data stream generator.
91 lines (89 loc) • 95.9 kB
JavaScript
import"./chunk-WUEERSLW.js";import"./chunk-7T3SMDWU.js";import{$ as L,$b as Vi,Aa as li,B as ii,Ba as ci,Bb as Ti,Ca as Re,D as lt,Da as ui,Db as wi,Ea as pi,Eb as ki,Fa as di,Fb as Ai,G as k,Gb as Mi,H as W,Hb as Pi,I as ni,Ib as Ve,Ja as mi,Ka as hi,Kb as Ci,La as fi,M as Ie,Ma as gi,Mb as xi,N as re,Na as yi,Nb as Ni,Oa as _i,Ob as Di,Pa as dt,Qb as Ii,R as Y,Rb as Oi,Sb as Li,T as A,X as m,Y as y,Yb as Ri,Z as G,Zb as Fi,_ as K,_b as $i,aa as N,ac as zi,bc as Bi,cc as ze,dc as Ki,fc as ji,ga as te,gb as bi,gc as qi,ha as v,hb as Fe,hc as Qi,ia as ye,ib as vi,ic as Gi,ja as si,kc as Ui,la as ct,lc as Wi,ma as ut,mb as Si,mc as Xi,na as pt,nc as Hi,o as w,oc as Ji,p as Ne,pc as Yi,q as se,qc as Zi,s as De,ta as ri,tb as E,ub as Z,v as C,va as Oe,vb as Ei,w as x,wa as Le,wb as mt,xb as _e,ya as ai,yb as ht,za as oi,zb as $e}from"./chunk-GTMPMMK5.js";import{a as xe,c as ti}from"./chunk-EQDQRRRY.js";var $n=[{path:"home",loadChildren:()=>import("./chunk-W457DSAG.js").then(s=>s.HomePageModule)},{path:"settings",loadChildren:()=>import("./chunk-QIMNGK5Z.js").then(s=>s.SettingsPageModule)},{path:"",redirectTo:"home",pathMatch:"full"},{path:"**",redirectTo:"home",pathMatch:"full"}],en=(()=>{class s{static \u0275fac=function(i){return new(i||s)};static \u0275mod=re({type:s});static \u0275inj=se({imports:[dt.forRoot($n,{anchorScrolling:"enabled"}),dt]})}return s})();var Be=class{version="";creator="";wpt=[];rte=[];trk=[];extensions={};metadata=new je;x2js=new Ui;constructor(){this.init()}init(){this.version="1.1",this.creator="@panaaj",this.wpt=[],this.rte=[],this.trk=[],this.extensions={},this.metadata=new je}stringify(){return this.toXML()}toXML(){let e=`<?xml version="1.0" encoding="UTF-8"?>\r
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="${this.version}" xmlns="http://www.topografix.com/GPX/1/1" creator="${this.creator}" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.topografix.com/GPX/Private/TopoGrafix/0/1 http://www.topografix.com/GPX/Private/TopoGrafix/0/1/topografix.xsd" xmlns:topografix="http://www.topografix.com/GPX/Private/TopoGrafix/0/1">\r
`+this.metadataToXML()+this.waypointsToXML()+this.routesToXML()+this.tracksToXML();return e+=this.extensionsToXML(this.extensions),e+=`</gpx>\r
`,e}metadataToXML(){let e=` <metadata>\r
<name>${this.metadata.name||""}</name>\r
<desc>${this.metadata.desc||""}</desc>\r
<time>${this.metadata.time||""}</time>\r
`;return e+=this.metadata.keywords?` <keywords>${this.metadata.keywords||""}</keywords>\r
`:"",this.metadata.author&&(e+=` <author>\r
<name>${this.metadata.author.name||""}</name>\r
<email>\r
<id>${this.metadata.author.email.id||""}</id>\r
<domain>${this.metadata.author.email.domain||""}</domain>\r
</email>\r
<link href="${this.metadata.author.link.href||""}">\r
<text>${this.metadata.author.link.text||""}</text>\r
<type>${this.metadata.author.link.type||""}</type>\r
</link>\r
</author>\r
`),this.metadata.copyright&&(e+=` <copyright author="${this.metadata.copyright||""}">\r
<year>${this.metadata.copyright.year||""}</year>\r
<license>${this.metadata.copyright.license||""}</license>\r
</copyright>\r
`),this.metadata.link.forEach(t=>{e+=` <link href="${t.href||""}">\r
<text>${t.text||""}</text>\r
<type>${t.type||""}</type>\r
</link>\r
`}),e+=` <bounds minlat="${this.metadata.bounds.minLat}" minlon="${this.metadata.bounds.minLon}" maxlat="${this.metadata.bounds.maxLat}" maxlon="${this.metadata.bounds.maxLon}"></bounds>\r
`,e+=this.extensionsToXML(this.metadata.extensions,2),e+=` </metadata>\r
`,e}waypointsToXML(){let e="";for(let t of this.wpt)e+=this.ptToXML(t,"wpt");return e}routesToXML(){let e="";return this.rte.forEach(t=>{e+=` <rte>\r
`,e+=t.name?` <name>${t.name||""}</name>\r
`:"",e+=t.cmt?` <cmt>${t.cmt||""}</cmt>\r
`:"",e+=t.desc?` <desc>${t.desc||""}</desc>\r
`:"",e+=t.src?` <src>${t.src||""}</src>\r
`:"",e+=t.number?` <number>${t.number||""}</number>\r
`:"",e+=t.type?` <type>${t.type||""}</type>\r
`:"",t.link.forEach(i=>{e+=` <link href="${i.href||""}">\r
<text>${i.text||""}</text>\r
<type>${i.type||""}</type>\r
</link>\r
`}),e+=this.extensionsToXML(t.extensions,2);for(let i of t.rtept)e+=this.ptToXML(i,"rtept");e+=` </rte>\r
`}),e}tracksToXML(){let e="";return this.trk.forEach(t=>{e+=` <trk>\r
`,e+=t.name?` <name>${t.name||""}</name>\r
`:"",e+=t.cmt?` <cmt>${t.cmt||""}</cmt>\r
`:"",e+=t.desc?` <desc>${t.desc||""}</desc>\r
`:"",e+=t.src?` <src>${t.src||""}</src>\r
`:"",e+=t.number?` <number>${t.number||""}</number>\r
`:"",e+=t.type?` <type>${t.type||""}</type>\r
`:"",e+=this.extensionsToXML(t.extensions,2),t.trkseg.forEach(i=>{e+=` <trkseg>\r
`;for(let n of i.trkpt)e+=this.ptToXML(n,"trkpt");e+=` </trkseg>\r
`}),e+=` </trk>\r
`}),e}ptToXML(e,t){let i="",n=2;switch(t){case"trkpt":i=" ",n=4;break;case"rtept":i=" ",n=3;break}let r="";return r+=`${i} <${t} lat="${e.lat.toFixed(6)}" lon="${e.lon.toFixed(6)}">\r
`,r+=e.sym?`${i} <sym>${e.sym||""}</sym>\r
`:"",r+=e.name?`${i} <name>${e.name||""}</name>\r
`:"",r+=e.cmt?`${i} <cmt>${e.cmt||""}</cmt>\r
`:"",r+=e.desc?`${i} <desc>${e.desc||""}</desc>\r
`:"",r+=e.src?`${i} <src>${e.src||""}</src>\r
`:"",r+=e.type?`${i} <type>${e.type||""}</type>\r
`:"",r+=e.time?`${i} <time>${e.datetime||""}</time>\r
`:"",r+=e.fix?`${i} <fix>${e.fix||""}</fix>\r
`:"",r+=e.ele?`${i} <ele>${e.ele||""}</ele>\r
`:"",r+=e.magvar?`${i} <magvar>${e.magvar||""}</magvar>\r
`:"",r+=e.geoidHeight?`${i} <geoidheight>${e.geoidHeight||""}</geoidheight>\r
`:"",r+=e.sat?`${i} <sat>${e.sat||""}</sat>\r
`:"",r+=e.vdop?`${i} <vdop>${e.vdop||""}</vdop>\r
`:"",r+=e.hdop?`${i} <hdop>${e.hdop||""}</hdop>\r
`:"",r+=e.pdop?`${i} <pdop>${e.pdop||""}</pdop>\r
`:"",r+=e.ageOfGpsData?`${i} <ageofdgpsdata>${e.ageOfGpsData||""}</ageofdgpsdata>\r
`:"",r+=e.dgpsid?`${i} <dgpsid>${e.dgpsid||""}</dgpsid>\r
`:"",e.link.forEach(a=>{r+=`${i} <link href="${a.href||""}">\r
${i} <text>${a.text||""}</text>\r
${i} <type>${a.type||""}</type>\r
${i} </link>\r
`}),r+=this.extensionsToXML(e.extensions,n),r+=`${i} </${t}>\r
`,r}extensionsToXML(e,t=1){let i="";if(e&&Object.keys(e).length!=0){let n=" ".slice(0-t);i+=`${n}<extensions>\r
${n} ${this.x2js.toString(e)}\r
${n}</extensions>\r
`}return i}parse(e){if(!e||e.indexOf("<gpx")==-1)return!1;this.init();let t=this.x2js.toJson(e);if(!t.gpx)return!1;if(t.gpx.metadata){let i=t.gpx.metadata;this.metadata.name=i.name?i.name:null,this.metadata.desc=i.desc?i.desc:null,this.metadata.keywords=i.keywords?i.keywords:null,i.author&&(this.metadata.author=new _t,this.metadata.author.name=i.author.name?i.author.name:null,i.author.email&&(this.metadata.author.email.id=i.author.email.id?i.author.email.id:void 0,this.metadata.author.email.domain=i.author.email.domain?i.author.email.domain:void 0),i.author.link&&(this.metadata.author.link.href=i.author.link._href?i.author.link._href:null,this.metadata.author.link.text=i.author.link.text?i.author.link.text:null,this.metadata.author.link.type=i.author.link.type?i.author.link.type:null)),i.copyright&&(this.metadata.copyright=new vt,this.metadata.copyright.author=i.copyright._author?i.copyright._author:null,this.metadata.copyright.license=i.copyright.license?i.copyright.license:null,this.metadata.copyright.year=i.copyright.year?i.copyright.year:null),i.bounds&&(this.metadata.bounds.minLat=i.bounds._minlat?i.bounds._minlat:null,this.metadata.bounds.minLon=i.bounds._minlon?i.bounds._minlon:null,this.metadata.bounds.maxLat=i.bounds._maxlat?i.bounds._maxlat:null,this.metadata.bounds.maxLon=i.bounds._maxlon?i.bounds._maxlon:null),this.metadata.link=i.link?this.parseLinks(i.link):[],this.metadata.extensions=i.extensions?this.parseExtensions(i.extensions):{}}return t.gpx.wpt&&this.parseWaypoints(t.gpx.wpt),t.gpx.rte&&this.parseRoutes(t.gpx.rte),t.gpx.trk&&this.parseTracks(t.gpx.trk),this.extensions=t.gpx.extensions?this.parseExtensions(t.gpx.extensions):{},!0}parseWaypoints(e){if(Array.isArray(e))e.forEach(t=>{let i=this.toWpt(t);this.updateBounds(i),this.wpt.push(i)});else{let t=this.toWpt(e);this.updateBounds(t),this.wpt.push(t)}}parseRoutes(e){if(Array.isArray(e))e.forEach(t=>{let i=this.toRte(t);this.updateBounds(i),this.rte.push(i)});else{let t=this.toRte(e);this.updateBounds(t),this.rte.push(t)}}parseTracks(e){if(Array.isArray(e))e.forEach(t=>{let i=this.toTrk(t);this.updateBounds(i),this.trk.push(i)});else{let t=this.toTrk(e);this.updateBounds(t),this.trk.push(t)}}updateBounds(e){this.metadata.bounds.minLat=e.lat<this.metadata.bounds.minLat?e.lat:this.metadata.bounds.minLat,this.metadata.bounds.minLon=e.lon<this.metadata.bounds.minLon?e.lon:this.metadata.bounds.minLon,this.metadata.bounds.maxLat=e.lat>this.metadata.bounds.maxLat?e.lat:this.metadata.bounds.maxLat,this.metadata.bounds.maxLon=e.lon>this.metadata.bounds.maxLon?e.lon:this.metadata.bounds.maxLon}parseExtensions(e){return e}parseLinks(e){let t=[];if(!e)return t;if(Array.isArray(e))e.forEach(i=>{let n=new Ee;n.href=i._href,n.text=i.text,n.type=i.type,t.push(n)});else{let i=new Ee;i.href=e._href,i.text=e.text,i.type=e.type,t.push(i)}return t}toRte(e){let t=new gt;return t.name=e.name?e.name:null,t.cmt=e.cmt?e.cmt:null,t.desc=e.desc?e.desc:null,t.src=e.src?e.src:null,t.link=e.link?this.parseLinks(e.link):[],t.number=e.number?parseInt(e.number):void 0,t.type=e.type?e.type:null,t.extensions=e.extensions?this.parseExtensions(e.extensions):{},e.rtept&&(t.rtept=this.toPtArray(e.rtept)),t}toWpt(e){let t=new ft;t.lat=parseFloat(e._lat)||0,t.lon=parseFloat(e._lon)||0,t.ele=e.ele?parseFloat(e.ele):void 0,t.magvar=e.magvar?parseFloat(e.magvar):void 0,t.geoidHeight=e.geoidheight?parseFloat(e.geoidheight):void 0,t.sat=e.sat?parseFloat(e.sat):void 0,t.hdop=e.hdop?parseFloat(e.hdop):void 0,t.vdop=e.vdop?parseFloat(e.vdop):void 0,t.pdop=e.pdop?parseFloat(e.pdop):void 0,t.ageOfGpsData=e.ageofgpsdata?parseFloat(e.ageofgpsdata):void 0,t.dgpsid=e.dgpsid?parseFloat(e.dgpsid):void 0,t.sym=e.sym?e.sym:null,t.name=e.name?e.name:null,t.cmt=e.cmt?e.cmt:null,t.desc=e.desc?e.desc:null,t.src=e.src?e.src:null,t.type=e.type?e.type:null,t.datetime=e.time?e.time:null;let i=e.fix?e.fix:Et.NONE;return t.fix=i,t.link=e.link?this.parseLinks(e.link):[],t.extensions=e.extensions?this.parseExtensions(e.extensions):{},t}toTrk(e){let t=new yt;if(t.name=e.name?e.name:null,t.cmt=e.cmt?e.cmt:null,t.desc=e.desc?e.desc:null,t.src=e.src?e.src:null,t.link=e.link?this.parseLinks(e.link):[],t.number=e.number?parseInt(e.number):void 0,t.type=e.type?e.type:null,t.extensions=e.extensions?this.parseExtensions(e.extensions):{},e.trkseg)if(Array.isArray(e.trkseg))e.trkseg.forEach(i=>{let n=new Ke;n.extensions=i.extensions?this.parseExtensions(i.extensions):{},i.trkpt&&(n.trkpt=this.toPtArray(i.trkpt)),t.trkseg.push(n)});else{let i=new Ke;i.extensions=e.trkseg.extensions?this.parseExtensions(e.trkseg.extensions):{},e.trkseg.trkpt&&(i.trkpt=this.toPtArray(e.trkseg.trkpt)),t.trkseg.push(i)}return t}toPtArray(e){let t=[];if(Array.isArray(e))e.forEach(i=>{let n=this.toWpt(i);this.updateBounds(n),t.push(n)});else{let i=this.toWpt(e);this.updateBounds(i),t.push(i)}return t}setExtension(e,t,i){e.extensions||(e.extensions={});let n=t.split("."),r=e.extensions;n.forEach(a=>{r[a]||(r[a]={}),r=r[a]}),e.extensions.signalk.uuid=i}},ft=class{lat=0;lon=0;ele;datetime;magvar;geoidHeight;name;cmt;desc;src;link=[];sym;type;fix=Et.NONE;sat;hdop;vdop;pdop;ageOfGpsData;dgpsid;extensions={};constructor(e,t){this.lat=e||0,this.lon=t||0}},gt=class{name="";cmt="";desc="";src="";link=[];number;type;extensions={};rtept=[];constructor(e){this.name=e||""}},yt=class{name="";cmt="";desc="";src="";link=[];number;type="";extensions={};trkseg=[];constructor(e){this.name=e||""}},Ke=class{trkpt=[];extensions={};constructor(){}},Et=function(s){return s.NONE="none",s["2D"]="2d",s["3D"]="3d",s.DGPS="dgps",s.PPS="pps",s}(Et||{}),je=class{name="";desc="";author;copyright;link=[];time=new Date().toISOString();keywords="";bounds=new St;extensions;constructor(){}},Ee=class{href="";text="";type="";constructor(){}},_t=class{name="";email=new bt;link=new Ee;constructor(){}},bt=class{id="";domain="";constructor(){}},vt=class{author="";license="";year="";constructor(){}},St=class{minLat=90;minLon=180;maxLat=-90;maxLon=-180;constructor(){}};function qn(s,e){s&1&&(m(0,"div",9)(1,"div")(2,"b"),v(3,"Invalid GPX Data:"),y(),G(4,"br")(5,"br"),m(6,"i"),v(7,"Selected file does not contain GPX data or"),G(8,"br"),v(9," does not correctly implement namespaced <extensions> attributes."),y()()())}function Qn(s,e){s&1&&(m(0,"div",9)(1,"div")(2,"b"),v(3,"No Track Data:"),y(),G(4,"br")(5,"br"),m(6,"i"),v(7,"Selected file does not contain any Tracks."),G(8,"br"),v(9," Please select a GPX file containing Track data."),y()()())}function Gn(s,e){if(s&1){let t=K();m(0,"mat-list-item",13),L("click",function(){let n=C(t).index,r=N(2);return x(r.load(n))}),m(1,"span",14)(2,"mat-icon",15),v(3,"show_chart"),y(),v(4),y(),m(5,"span",16)(6,"i"),v(7),y()()()}if(s&2){let t=e.$implicit;k(4),si(" ",t.name," "),k(3),ye(t.description)}}function Un(s,e){if(s&1&&(m(0,"div",10)(1,"div",11)(2,"mat-nav-list"),Y(3,Gn,8,2,"mat-list-item",12),y()()()),s&2){let t=N();k(3),A("ngForOf",t.gpxData.tracks)}}var tn=(()=>{class s{dialogRef;data;gpxData={name:"",tracks:[]};display={notValid:!1,noTracks:!1};gpx;constructor(t,i){this.dialogRef=t,this.data=i,this.gpx=new Be}ngOnInit(){this.data.fileData=this.data.fileData||null,this.parseFileData(this.data.fileData)}parseFileData(t){if(this.gpxData.tracks=[],this.display.notValid=!1,!this.gpx.parse(t))return console.warn(`Selected file does not contain GPX data or
does not correctly implement namespaced <extensions> attributes`,"Invalid GPX Data:"),this.display.notValid=!0,!1;if(this.display.noTracks=!1,this.gpx.trk.length==0)return console.warn("Selected file does not contain any Track data! ","No Tracks found!:"),this.display.noTracks=!0,!1;let i=1;return this.gpx.trk.forEach(n=>{this.gpxData.tracks.push({name:n.name?n.name:`Trk: ${i}`,description:n.desc?n.desc:n.cmt?n.cmt:""}),i++}),!0}load(t){this.dialogRef.close(this.transformTrack(this.gpx.trk[t]))}transformTrack(t){let i=new Ji;return i.name=t.name,i.description=t.desc,t.trkseg.forEach(n=>{n.trkpt.forEach(r=>{i.addPoint({latitude:r.lat,longitude:r.lon})})}),i}static \u0275fac=function(i){return new(i||s)(W(Ai),W(Mi))};static \u0275cmp=Ie({type:s,selectors:[["import-dialog"]],standalone:!1,decls:14,vars:3,consts:[[1,"gpxload-dialog"],[2,"background-color","transparent"],[1,"dialog-icon"],["src","./assets/img/gpx.png",2,"height","35px"],[2,"flex","1 1 auto","text-align","center"],[2,"text-align","right"],["mat-icon-button","",3,"click"],["class","error",4,"ngIf"],["class","dialog-content",4,"ngIf"],[1,"error"],[1,"dialog-content"],[1,"list-container-scrollable"],["class","row",3,"click",4,"ngFor","ngForOf"],[1,"row",3,"click"],["matLine","",1,"name"],["color","primary"],["matLine",""]],template:function(i,n){i&1&&(m(0,"div",0)(1,"mat-toolbar",1)(2,"span",2)(3,"mat-icon"),G(4,"img",3),y()(),m(5,"span",4),v(6,"Follow Track"),y(),m(7,"span",5)(8,"button",6),L("click",function(){return n.dialogRef.close(null)}),m(9,"mat-icon"),v(10,"close"),y()()()(),Y(11,qn,10,0,"div",7)(12,Qn,10,0,"div",7)(13,Un,4,1,"div",8),y()),i&2&&(k(11),A("ngIf",n.display.notValid),k(),A("ngIf",n.display.noTracks),k(),A("ngIf",!n.display.notValid&&!n.display.noTracks))},dependencies:[Oe,Le,Ve,Fe,Di,Ni,ze],styles:[".gpxload-dialog[_ngcontent-%COMP%]{font-family:roboto;position:relative;width:100%}.dialog-content[_ngcontent-%COMP%]{position:relative;min-height:300px;max-height:400px;width:100%;min-width:240px;overflow-y:auto}.dialog-icon[_ngcontent-%COMP%]{display:none}.card-group[_ngcontent-%COMP%]{padding:5px 5%}.card-group-title[_ngcontent-%COMP%]{font-weight:700;font-size:10pt;font-family:Arial,Helvetica,sans-serif;padding:10px 0}.card-group-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}.card-group-row-item[_ngcontent-%COMP%]{padding-right:15px;max-width:60%}.pnlSelectedItems[_ngcontent-%COMP%]{display:none}.pnlSelect[_ngcontent-%COMP%]{flex:1 1 auto;padding-left:3px;padding-right:3px;text-align:right}.txtSelect[_ngcontent-%COMP%]{display:none}button[_ngcontent-%COMP%]{min-width:unset;padding:unset}@media only screen and (min-width: 400px){.pnlSelectedItems[_ngcontent-%COMP%]{display:inline}}@media only screen and (min-width: 475px){.pnlSelectedItems[_ngcontent-%COMP%], .txtSelect[_ngcontent-%COMP%]{display:inline}.pnlSelect[_ngcontent-%COMP%]{flex:1 1 auto;padding-left:20px;padding-right:15px;text-align:right}button[_ngcontent-%COMP%]{min-width:inherit;padding:inherit}.dialog-content[_ngcontent-%COMP%]{min-width:400px}.dialog-icon[_ngcontent-%COMP%]{display:inline}}@media only screen and (min-width: 800px){.card-group[_ngcontent-%COMP%]{padding:5px 5%}}.rgrid[_ngcontent-%COMP%]{display:flex;flex-direction:column}.rgrid[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:row}.rgrid[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{flex:2}.rgrid[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{flex:3}.rgrid[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .check[_ngcontent-%COMP%]{text-align:right}"]})}return s})();function Wn(s,e){if(s&1){let t=K();m(0,"button",31),L("click",function(){C(t);let n=N();return x(n.setToStartOfTrack())}),m(1,"mat-icon"),v(2,"settings_backup_restore"),y()()}}function Xn(s,e){if(s&1){let t=K();m(0,"button",32),L("click",function(){C(t);let n=N();return x(n.clearGPX())}),m(1,"mat-icon"),v(2,"cancel"),y()()}}function Hn(s,e){if(s&1){let t=K();m(0,"button",33),L("click",function(){C(t);let n=N();return x(n.pauseSim())}),m(1,"mat-icon"),v(2),y()()}if(s&2){let t=N();A("matTooltip",t.navsim.sim.freeze?"Paused. Click to Resume":"Pause"),k(2),ye(t.navsim.sim.freeze?"skip_next":"pause")}}function Jn(s,e){if(s&1){let t=K();m(0,"button",34),L("click",function(){C(t);let n=N();return x(n.checkPluginStatus())}),m(1,"mat-icon"),v(2,"refresh"),y()()}}function Yn(s,e){if(s&1){let t=K();m(0,"button",35),L("click",function(){C(t);let n=N();return x(n.startSim())}),m(1,"mat-icon"),v(2,"play_arrow"),y()()}if(s&2){let t=N();A("disabled",!t.display.pluginReady)}}function Zn(s,e){if(s&1){let t=K();m(0,"button",36),L("click",function(){C(t);let n=N();return x(n.stopSim())}),m(1,"mat-icon"),v(2,"stop"),y()()}}function es(s,e){if(s&1){let t=K();m(0,"ap-file-input",37),L("chosen",function(n){C(t);let r=N();return x(r.loadGPX(n))})("invalid",function(n){C(t);let r=N();return x(r.invalidGPX(n))}),m(1,"a",38)(2,"mat-icon"),G(3,"img",39),y(),v(4," \xA0Follow GPX Track "),y()()}s&2&&A("astext",!0)("maxfilesize",1e6*1024)}function ts(s,e){s&1&&(m(0,"mat-error"),v(1," Please enter a valid SignalK path! "),y())}function is(s,e){s&1&&(m(0,"mat-error"),v(1," Please enter a valid value. "),y())}function ns(s,e){if(s&1){let t=K();m(0,"div",47)(1,"div",48)(2,"mat-form-field",49)(3,"input",50,4),pt("ngModelChange",function(n){let r=C(t).$implicit;return ut(r[0],n)||(r[0]=n),x(n)}),L("change",function(){let n=C(t).index,r=te(4),a=N(2);return x(a.updateAttrib(r,n))}),y(),Y(5,ts,2,0,"mat-error",51),y()(),m(6,"div",52)(7,"mat-form-field",53)(8,"input",54,5),pt("ngModelChange",function(n){let r=C(t).$implicit;return ut(r[1],n)||(r[1]=n),x(n)}),L("change",function(){let n=C(t).index,r=te(9),a=N(2);return x(a.updateAttrib(r,n))}),y(),Y(10,is,2,0,"mat-error",51),y()(),m(11,"div",55)(12,"button",56),L("click",function(){let n=C(t).index,r=N(2);return x(r.deleteAttrib(n))}),m(13,"mat-icon",57),v(14,"clear"),y()()()()}if(s&2){let t=e.$implicit,i=te(4),n=te(9),r=N(2);k(3),ct("ngModel",t[0]),A("value",t[0])("disabled",r.navsim.sim.isRunning),k(2),A("ngIf",i.invalid&&(i.dirty||i.touched)),k(2),A("hintLabel","Value ("+t[2]+")"),k(),ct("ngModel",t[1]),A("value",t[1])("disabled",!1),k(2),A("ngIf",n.invalid&&(n.dirty||n.touched))}}function ss(s,e){if(s&1){let t=K();m(0,"mat-card",40)(1,"div",41)(2,"span",42),v(3," SignalK Attributes:\xA0 "),y(),m(4,"span",43)(5,"button",44),L("click",function(){C(t);let n=N();return x(n.addAttrib())}),m(6,"span",45),v(7,"ADD"),y(),m(8,"mat-icon"),v(9,"add"),y()()()(),Y(10,ns,15,9,"div",46),y()}if(s&2){let t=N();k(5),A("disabled",t.navsim.sim.isRunning),k(5),A("ngForOf",t.skAttrib)}}var nn=(()=>{class s{app;overlayContainer;afs;navsim;plugin;dialog;snackbar;display={badge:{hide:!0,value:""},pluginReady:!1,skAttrib:!1};snackbarRef;unsubscribe=[];skAttrib=[];menuItems=[{href:"/",text:"Home"},{href:"dials",text:"Dials"},{href:"settings",text:"Settings"}];subscriptions=[];constructor(t,i,n,r,a,o,l){this.app=t,this.overlayContainer=i,this.afs=n,this.navsim=r,this.plugin=a,this.dialog=o,this.snackbar=l,this.app.id="sksim",this.app.version="24.03.17",this.app.name="SKsim",this.app.description="Data stream generator for Signal K server.",this.app.url="",this.app.logo="./assets/img/app_logo.png",this.app.darkMode=!1}ngOnInit(){this.subscriptions.push(this.app.versionCheck$.subscribe(t=>this.handleAppVerisonCheck(t))),this.subscriptions.push(this.app.settings$.subscribe(t=>this.handleAppSettings(t))),this.subscriptions.push(this.app.dbReady$.subscribe(t=>this.handleDBReady(t))),this.subscriptions.push(this.app.dbUpgrade$.subscribe(t=>this.handleDBVersion(t))),this.app.dbVersion=1,this.app.stateInDB=!1,this.initialise()}ngOnDestroy(){this.subscriptions.forEach(t=>t.unsubscribe()),this.navsim.stop()}handleAppVerisonCheck(t){this.app.debug("appversionCheck$:handleAppVerisonCheck()",t)}handleAppSettings(t){this.app.debug("app.settings$:handleAppSettings()",t),t.action=="load"&&t.setting=="config"&&(typeof this.app.config.darkMode>"u"?this.app.config.darkMode=this.app.darkMode:this.app.darkMode=this.app.config.darkMode),t.action=="save"}handleDBVersion(t){this.app.debug("** app.dbUpgrade$:handleDBVersion() **",t);let i="test",n="id";t.newVersion!=1&&!t.currentTarget.result.objectStoreNames.contains(i)&&t.currentTarget.result.createObjectStore(i,{keyPath:n}).createIndex(`${n}_idx`,n,{unique:!0})}handleDBReady(t){this.app.debug("app.dbReady$:handleDBReady",t),this.app.stateInDB&&this.app.loadAll()}setDarkTheme(t){typeof t>"u"?window.matchMedia("(prefers-color-scheme: dark)").matches?(this.overlayContainer.getContainerElement().classList.add("dark-theme"),this.app.darkMode=!0):(this.overlayContainer.getContainerElement().classList.remove("dark-theme"),this.app.darkMode=!1):(this.app.darkMode=t,t?this.overlayContainer.getContainerElement().classList.add("dark-theme"):this.overlayContainer.getContainerElement().classList.remove("dark-theme"))}initialise(){this.setDarkTheme(),this.app.config={version:"",interval:2e3,steeringMode:!1,outputFormat:"SIGNALK",serverType:"SIGNALK",serial:{port:null,settings:{baudRate:9600,dataBits:8,stopBits:1,parity:"none"}},seed:{gps:{speed:{max:70,min:0,minus:.01,plus:.01,value:5},heading:{max:359,min:0,minus:.05,plus:.05,value:15},hdop:{max:5,min:.5,minus:.07,plus:.07,value:1.5},pdop:{max:5,min:.5,minus:.07,plus:.07,value:1.5},vdop:{max:5,min:.5,minus:.07,plus:.07,value:1.5},position:{max:null,min:null,minus:null,plus:null,value:{latitude:-35,longitude:138.5}}},water:{depth:{max:100,min:1,minus:.05,plus:.05,value:8},temperature:{max:25,min:0,minus:.01,plus:.01,value:7.5}},wind:{direction:{max:359,min:0,minus:.05,plus:.05,value:285},speed:{max:40,min:2,minus:.2,plus:.2,value:11}},p0:{rpm:{max:6e3,min:600,minus:.02,plus:.02,value:600},temperature:{max:115,min:85,minus:.01,plus:.01,value:85}},p1:{rpm:{max:6e3,min:600,minus:.02,plus:.02,value:600},temperature:{max:115,min:85,minus:.01,plus:.01,value:85}},wpt:{position:{value:{latitude:0,longitude:0},min:null,max:null,plus:null,minus:null}}},panel:{order:{gps:1,vessel:2,wind:3,water:4,propulsion:5,destination:6}}},this.app.data={trackLoaded:!1,trackData:null,trackIndex:0},this.app.loadAll(),this.app.checkVersion(),this.navsim.apply(this.app.config),this.unsubscribe.push(this.navsim.update$.subscribe(t=>this.handleSimMsg(t))),this.unsubscribe.push(this.navsim.tick$.subscribe(t=>this.handleSimTick())),this.plugin.getServerInfo().subscribe(t=>{if(t.server&&t.server?.id=="signalk-server-node"){let i=t.server.version?t.server.version.split("."):[0,0,0];i[0]===1&&i[1]<36?this.app.alert(`Unsupported server version! (${t.server.version})
Please upgrade to current version of Signal K server.`,"ERROR:"):this.checkPluginStatus()}else this.app.alert(`Invalid server information received!
Unsupported server type.`,"ERROR:")})}checkPluginStatus(){this.plugin.poll().subscribe({next:t=>{this.display.pluginReady=t.enabled,this.display.pluginReady||this.app.alert(`Plugin is not enabled!
Ensure the Plugin is set to active on the Signal K server and then click the Refresh button.`,"Plugin not Active:")},error:t=>{this.display.pluginReady=!1,console.log(t),[401,403].includes(t.status)?this.login():this.app.alert(`${t.message}
Check browser console for details.`,"ERROR:")}})}login(){this.dialog.open(qi,{disableClose:!0,data:{message:"Server requires authentication"}}).afterClosed().subscribe(t=>{t.cancel?this.checkPluginStatus():this.plugin.authenticate(t).subscribe({next:i=>{this.plugin.token=i.token,this.checkPluginStatus()},error:i=>{console.log(i),this.login()}})})}openAbout(){this.plugin.info&&this.plugin.info.version&&(this.app.version=this.plugin.info.version),this.app.about()}startSim(){this.navsim.start()}stopSim(){this.navsim.stop()}pauseSim(){this.navsim.pause()}reset(){this.navsim.apply(this.app.config),this.navsim.sim.simObjects.get("wpt").mute=!0,this.afs.display.values.wpt.latitudeStr=null,this.afs.display.values.wpt.longitudeStr=null,this.afs.display.values.wpt.latitude=null,this.afs.display.values.wpt.longitude=null,this.afs.display.values.wpt.marker={latitude:null,longitude:null},this.afs.display.values.steering.rudderAngle=0,this.navsim.sim.encode()}toggleAttributes(){this.display.skAttrib=!this.display.skAttrib}addAttrib(){this.skAttrib.length==0?this.skAttrib.push([null,null,null]):(this.skAttrib[0][0]&&this.skAttrib[0][1]||this.skAttrib.length==0)&&this.skAttrib.unshift([null,null,null])}deleteAttrib(t){this.skAttrib.splice(t,1),this.applyToSim()}updateAttrib(t,i){if(t.invalid)this.app.debug("SignalK data entry invalid!");else if(this.app.debug(this.skAttrib[i]),this.skAttrib[i][0]){if(this.skAttrib[i][1]==null||this.skAttrib[i][1]=="")this.app.debug("** null value"),this.skAttrib[i][1]=null,this.skAttrib[i][2]="object";else if(!isNaN(this.skAttrib[i][1]))this.app.debug("** Is a number"),this.app.debug(parseFloat(this.skAttrib[i][1])),this.skAttrib[i][1]=parseFloat(this.skAttrib[i][1]),this.skAttrib[i][2]=typeof this.skAttrib[i][1];else if(this.app.debug("** Is a string"),this.app.debug(this.skAttrib[i][1]),this.skAttrib[i][2]=typeof this.skAttrib[i][1],this.skAttrib[i][1].slice(0,1)=="{"){this.app.debug("** Possible object");try{JSON.parse(this.skAttrib[i][1]),this.app.debug("** Valid JSON.."),this.skAttrib[i][2]="object"}catch{this.app.debug("** Invalid JSON.. leave as String")}}this.app.debug(this.skAttrib[i][1]),this.app.debug("Value stored as "+this.skAttrib[i][2]),this.app.debug("SignalK data entry valid...updating..."),this.applyToSim()}}applyToSim(){this.navsim.sim.simObjects.get("sk").init({}),this.skAttrib.forEach(t=>{if(t[0]){let i=t[2]=="object"?JSON.parse(t[1]):t[1];this.navsim.sim.simObjects.get("sk").addSKValue(t[0],i)}})}handleSimMsg(t){switch(t.source){case"sim":this.simUpdate(t.data);break;case"server":this.serverMsg(t.data);break}}serverMsg(t){t.action=="send"&&t.error&&!this.snackbarRef&&(this.snackbarRef=this.snackbar.open(t.message,null,{duration:2e3}),this.snackbarRef.afterDismissed().subscribe(()=>{this.snackbarRef=null}))}simUpdate(t){let i=JSON.parse(JSON.stringify(t.values));i.gps.position=t.values.gps.position;let n=JSON.parse(JSON.stringify(this.afs.display.values));n.gps=i.gps,n.gps.timestamp=new Date(i.gps.timestamp).toISOString(),n.gps.mode=i.gps.fixing?i.gps.mode:0,n.gps.mode=this.afs.GPS_FIXTYPE[i.gps.mode],n.gps.quality=i.gps.quality!=null?this.afs.GPS_STATUS[i.gps.quality].quality:this.afs.display.values.gps.quality,n.water=i.water,n.wind=i.wind,n.propulsion.port=i.p0,n.propulsion.starboard=i.p1,n.destination=i.destination,this.afs.display.values=n;let r={latitude:n.gps.position.latitude,longitude:n.gps.position.longitude};this.afs.display.posString.latitude=r.latitude.toFixed(6),this.afs.display.posString.longitude=r.longitude.toFixed(6)}handleSimTick(){this.app.data.trackLoaded&&this.navsim.sim.isRunning&&!this.navsim.sim.freeze&&this.nextPoint()}nextPoint(t=!1){if(t?this.app.data.trackIndex=0:this.app.data.trackIndex++,this.app.debug(`Set next point (${this.app.data.trackIndex})`),this.app.data.trackIndex<this.app.data.trackData.points.length-1){this.navsim.sim.simObjects.get("gps").value.position=this.app.data.trackData.points[this.app.data.trackIndex];let i=Hi.toGo(this.app.data.trackData.points[this.app.data.trackIndex],this.app.data.trackData.points[this.app.data.trackIndex+1]);this.navsim.sim.simObjects.get("gps").value.heading=i.bearing}else this.app.debug("End of track reached."),this.stopSim()}loadGPX(t){this.dialog.open(tn,{disableClose:!0,data:{fileData:t.data,fileName:t.name}}).afterClosed().subscribe(n=>{this.app.debug(n),n&&n.points.length>1?(this.app.data.trackData=n,this.app.data.trackLoaded=!0,this.navsim.sim.simObjects.get("gps").mask.position=!0,this.navsim.sim.simObjects.get("gps").mask.heading=!0,this.setToStartOfTrack()):n&&n.points.length<2?(this.app.data.trackLoaded=!1,this.app.alert(`Selected Track contains only one track point!
Please select a track with more than one point.`,"Follow Track")):this.app.data.trackLoaded=!1,this.afs.emitGpxResult(this.app.data.trackLoaded)})}invalidGPX(t){this.app.alert(t.message,"Follow Track")}setToStartOfTrack(){this.app.data.trackIndex=0,this.nextPoint(!0),this.afs.display.values.gps.position=this.app.data.trackData.points[0],this.afs.display.posString.latitude=this.app.data.trackData.points[0].latitude.toFixed(6),this.afs.display.posString.longitude=this.app.data.trackData.points[0].longitude.toFixed(6)}clearGPX(){this.app.data.trackData=null,this.app.data.trackLoaded=!1,this.app.data.trackIndex=0,this.navsim.sim.simObjects.get("gps").mask.heading=!1,this.navsim.sim.simObjects.get("gps").mask.position=!1}static \u0275fac=function(i){return new(i||s)(W(Gi),W(ki),W(Xi),W(Zi),W(Yi),W(Pi),W(Ri))};static \u0275cmp=Ie({type:s,selectors:[["app-root"]],standalone:!1,decls:61,vars:15,consts:[["infomenu","matMenu"],["rlah","routerLinkActive"],["rlas","routerLinkActive"],["tabPanel",""],["attrpath","ngModel"],["attrval","ngModel"],[1,"app-frame"],[1,"sksim-toolbar"],["mat-icon-button","","href","/","target","skserver","rel","noopener","matTooltip","Signal K Host","matTooltipPosition","below"],["src","./assets/img/app_logo.png"],[2,"flex","1 1 auto","text-align","right"],["mat-icon-button","","matTooltip","Reset to start of Track.",3,"click",4,"ngIf"],["mat-icon-button","","matTooltip","Cancel Follow Track",3,"click",4,"ngIf"],["mat-icon-button","",3,"matTooltip","click",4,"ngIf"],["mat-icon-button","","matTooltip","Check plugin status",3,"click",4,"ngIf"],["mat-icon-button","","matTooltip","Start Simulator",3,"disabled","click",4,"ngIf"],["mat-icon-button","","matTooltip","Stop Simulator",3,"click",4,"ngIf"],["mat-icon-button","",3,"mat-menu-trigger-for"],["matTooltip","Info Menu","matTooltipPosition","below"],[3,"astext","maxfilesize","chosen","invalid",4,"ngIf"],["mat-menu-item","",3,"click"],["mat-menu-item","","href","assets/help/index.html","target","help"],["mat-list-avatar",""],["src","assets/img/app_logo.png",2,"width","22px"],["mat-tab-nav-bar","",3,"tabPanel"],["mat-tab-link","","routerLink","/home","routerLinkActive","",3,"active"],["mat-tab-link","","routerLink","/settings","routerLinkActive","",3,"active"],["mat-tab-link","","matTooltip","Add Signal K path values",3,"click","active"],[1,"app-view"],[1,"view-content"],["style",`
position: fixed;
width: 100%;
z-index: 1000;
border: gray 1px solid;
`,4,"ngIf"],["mat-icon-button","","matTooltip","Reset to start of Track.",3,"click"],["mat-icon-button","","matTooltip","Cancel Follow Track",3,"click"],["mat-icon-button","",3,"click","matTooltip"],["mat-icon-button","","matTooltip","Check plugin status",3,"click"],["mat-icon-button","","matTooltip","Start Simulator",3,"click","disabled"],["mat-icon-button","","matTooltip","Stop Simulator",3,"click"],[3,"chosen","invalid","astext","maxfilesize"],["mat-menu-item",""],["src","./assets/img/gpx_black.png",2,"width","25px"],[2,"position","fixed","width","100%","z-index","1000","border","gray 1px solid"],[1,"skattrib-title",2,"display","flex"],[2,"flex","1 1 auto","line-height","2em","padding-left","5px"],[2,"text-align","right"],["mat-button","","matTooltip","New Attribute",3,"click","disabled"],[1,"btnlabel"],["style","display: flex; flex-wrap: nowrap; padding-left: 2px",4,"ngFor","ngForOf"],[2,"display","flex","flex-wrap","nowrap","padding-left","2px"],[2,"flex","1 2 auto"],["hintLabel","Path",2,"width","90%"],["matInput","","required","","pattern","^([a-z0-9]*\\.[a-zA-Z0-9]{1,})(\\.[a-zA-Z0-9]*)*$","placeholder","design.keel.type",3,"ngModelChange","change","ngModel","value","disabled"],[4,"ngIf"],[2,"flex","0.5 0.5 auto"],[3,"hintLabel"],["matInput","",3,"ngModelChange","change","ngModel","value","disabled"],[2,"width","40px"],["mat-icon-button","","matTooltip","Delete Attribute",3,"click"],["color","warn"]],template:function(i,n){if(i&1){let r=K();m(0,"div")(1,"div",6)(2,"mat-toolbar",7)(3,"mat-toolbar-row")(4,"a",8),G(5,"img",9),y(),m(6,"span"),v(7),y(),m(8,"span",10),Y(9,Wn,3,0,"button",11)(10,Xn,3,0,"button",12)(11,Hn,3,2,"button",13)(12,Jn,3,0,"button",14)(13,Yn,3,1,"button",15)(14,Zn,3,0,"button",16),m(15,"button",17)(16,"mat-icon"),v(17,"menu"),y()()()()(),m(18,"mat-menu",18,0),Y(20,es,5,2,"ap-file-input",19),m(21,"button",20),L("click",function(){return C(r),x(n.reset())}),m(22,"mat-icon"),v(23,"refresh"),y(),m(24,"span"),v(25,"Reset"),y()(),G(26,"mat-divider"),m(27,"a",21)(28,"mat-icon"),v(29,"help"),y(),m(30,"span"),v(31,"Help"),y()(),m(32,"button",20),L("click",function(){return C(r),x(n.openAbout())}),m(33,"mat-icon",22),G(34,"img",23),y(),m(35,"span"),v(36,"About"),y()()(),m(37,"nav",24)(38,"a",25,1)(40,"b")(41,"mat-icon"),v(42,"dashboard"),y(),v(43,"\xA0Dashboard"),y()(),m(44,"a",26,2)(46,"b")(47,"mat-icon"),v(48,"settings"),y(),v(49,"\xA0Settings"),y()(),m(50,"a",27),L("click",function(){return C(r),x(n.toggleAttributes())}),m(51,"b")(52,"mat-icon"),v(53),y()(),v(54,"\xA0Attributes "),y()(),m(55,"div",28)(56,"div",29),Y(57,ss,11,2,"mat-card",30),m(58,"mat-tab-nav-panel",null,3),G(60,"router-outlet"),y()()()()()}if(i&2){let r=te(19),a=te(39),o=te(45),l=te(59);k(7),ye(n.app.name),k(2),A("ngIf",!n.navsim.sim.isRunning&&n.app.data.trackLoaded),k(),A("ngIf",!n.navsim.sim.isRunning&&n.app.data.trackLoaded),k(),A("ngIf",n.navsim.sim.isRunning),k(),A("ngIf",!n.display.pluginReady),k(),A("ngIf",!n.navsim.sim.isRunning),k(),A("ngIf",n.navsim.sim.isRunning),k(),A("mat-menu-trigger-for",r),k(5),A("ngIf",!n.navsim.sim.isRunning),k(17),A("tabPanel",l),k(),A("active",a.isActive),k(6),A("active",o.isActive),k(6),A("active",!1),k(3),ye(n.display.skAttrib?"keyboard_arrow_down":"keyboard_arrow_right"),k(4),A("ngIf",n.display.skAttrib)}},dependencies:[Oe,Le,ui,pi,mi,hi,di,gi,yi,_i,Oi,Ii,Li,wi,Ti,ze,Bi,Si,Ci,bi,vi,Fe,xi,Ve,Ki,Fi,Vi,$i,Qi],styles:[".app-frame[_ngcontent-%COMP%]{width:100vw;height:100vh;overflow:hidden;position:relative}.app-view[_ngcontent-%COMP%]{inset:114px 0 0;overflow:auto;position:absolute}@media (max-width: 600px) and (orientation: portrait){.app-view[_ngcontent-%COMP%]{top:105px}}"]})}return s})();function sn(s){return new w(3e3,!1)}function rs(){return new w(3100,!1)}function as(){return new w(3101,!1)}function os(s){return new w(3001,!1)}function ls(s){return new w(3003,!1)}function cs(s){return new w(3004,!1)}function us(s,e){return new w(3005,!1)}function ps(){return new w(3006,!1)}function ds(){return new w(3007,!1)}function ms(s,e){return new w(3008,!1)}function hs(s){return new w(3002,!1)}function fs(s,e,t,i,n){return new w(3010,!1)}function gs(){return new w(3011,!1)}function ys(){return new w(3012,!1)}function _s(){return new w(3200,!1)}function bs(){return new w(3202,!1)}function vs(){return new w(3013,!1)}function Ss(s){return new w(3014,!1)}function Es(s){return new w(3015,!1)}function Ts(s){return new w(3016,!1)}function ws(s,e){return new w(3404,!1)}function ks(s){return new w(3502,!1)}function As(s){return new w(3503,!1)}function Ms(){return new w(3300,!1)}function Ps(s){return new w(3504,!1)}function Cs(s){return new w(3301,!1)}function xs(s,e){return new w(3302,!1)}function Ns(s){return new w(3303,!1)}function Ds(s,e){return new w(3400,!1)}function Is(s){return new w(3401,!1)}function Os(s){return new w(3402,!1)}function Ls(s,e){return new w(3505,!1)}function ae(s){switch(s.length){case 0:return new _e;case 1:return s[0];default:return new ht(s)}}function _n(s,e,t=new Map,i=new Map){let n=[],r=[],a=-1,o=null;if(e.forEach(l=>{let c=l.get("offset"),p=c==a,u=p&&o||new Map;l.forEach((S,b)=>{let h=b,_=S;if(b!=="offset")switch(h=s.normalizePropertyName(h,n),_){case $e:_=t.get(b);break;case Z:_=i.get(b);break;default:_=s.normalizeStyleValue(b,h,_,n);break}u.set(h,_)}),p||r.push(u),o=u,a=c}),n.length)throw ks(n);return r}function qt(s,e,t,i){switch(e){case"start":s.onStart(()=>i(t&&Tt(t,"start",s)));break;case"done":s.onDone(()=>i(t&&Tt(t,"done",s)));break;case"destroy":s.onDestroy(()=>i(t&&Tt(t,"destroy",s)));break}}function Tt(s,e,t){let i=t.totalTime,n=!!t.disabled,r=Qt(s.element,s.triggerName,s.fromState,s.toState,e||s.phaseName,i??s.totalTime,n),a=s._data;return a!=null&&(r._data=a),r}function Qt(s,e,t,i,n="",r=0,a){return{element:s,triggerName:e,fromState:t,toState:i,phaseName:n,totalTime:r,disabled:!!a}}function q(s,e,t){let i=s.get(e);return i||s.set(e,i=t),i}function rn(s){let e=s.indexOf(":"),t=s.substring(1,e),i=s.slice(e+1);return[t,i]}var Rs=typeof document>"u"?null:document.documentElement;function Gt(s){let e=s.parentNode||s.host||null;return e===Rs?null:e}function Fs(s){return s.substring(1,6)=="ebkit"}var ue=null,an=!1;function $s(s){ue||(ue=Vs()||{},an=ue.style?"WebkitAppearance"in ue.style:!1);let e=!0;return ue.style&&!Fs(s)&&(e=s in ue.style,!e&&an&&(e="Webkit"+s.charAt(0).toUpperCase()+s.slice(1)in ue.style)),e}function Vs(){return typeof document<"u"?document.body:null}function bn(s,e){for(;e;){if(e===s)return!0;e=Gt(e)}return!1}function vn(s,e,t){if(t)return Array.from(s.querySelectorAll(e));let i=s.querySelector(e);return i?[i]:[]}var Ut=(()=>{class s{validateStyleProperty(t){return $s(t)}containsElement(t,i){return bn(t,i)}getParentElement(t){return Gt(t)}query(t,i,n){return vn(t,i,n)}computeStyle(t,i,n){return n||""}animate(t,i,n,r,a,o=[],l){return new _e(n,r)}static \u0275fac=function(i){return new(i||s)};static \u0275prov=Ne({token:s,factory:s.\u0275fac})}return s})(),me=class{static NOOP=new Ut},he=class{};var zs=1e3,Sn="{{",Bs="}}",En="ng-enter",Ct="ng-leave",qe="ng-trigger",Xe=".ng-trigger",on="ng-animating",xt=".ng-animating";function ie(s){if(typeof s=="number")return s;let e=s.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:Nt(parseFloat(e[1]),e[2])}function Nt(s,e){switch(e){case"s":return s*zs;default:return s}}function He(s,e,t){return s.hasOwnProperty("duration")?s:Ks(s,e,t)}function Ks(s,e,t){let i=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i,n,r=0,a="";if(typeof s=="string"){let o=s.match(i);if(o===null)return e.push(sn(s)),{duration:0,delay:0,easing:""};n=Nt(parseFloat(o[1]),o[2]);let l=o[3];l!=null&&(r=Nt(parseFloat(l),o[4]));let c=o[5];c&&(a=c)}else n=s;if(!t){let o=!1,l=e.length;n<0&&(e.push(rs()),o=!0),r<0&&(e.push(as()),o=!0),o&&e.splice(l,0,sn(s))}return{duration:n,delay:r,easing:a}}function js(s){return s.length?s[0]instanceof Map?s:s.map(e=>new Map(Object.entries(e))):[]}function ee(s,e,t){e.forEach((i,n)=>{let r=Wt(n);t&&!t.has(n)&&t.set(n,s.style[r]),s.style[r]=i})}function de(s,e){e.forEach((t,i)=>{let n=Wt(i);s.style[n]=""})}function Te(s){return Array.isArray(s)?s.length==1?s[0]:Ei(s):s}function qs(s,e,t){let i=e.params||{},n=Tn(s);n.length&&n.forEach(r=>{i.hasOwnProperty(r)||t.push(os(r))})}var Dt=new RegExp(`${Sn}\\s*(.+?)\\s*${Bs}`,"g");function Tn(s){let e=[];if(typeof s=="string"){let t;for(;t=Dt.exec(s);)e.push(t[1]);Dt.lastIndex=0}return e}function ke(s,e,t){let i=`${s}`,n=i.replace(Dt,(r,a)=>{let o=e[a];return o==null&&(t.push(ls(a)),o=""),o.toString()});return n==i?s:n}var Qs=/-+([a-z0-9])/g;function Wt(s){return s.replace(Qs,(...e)=>e[1].toUpperCase())}function Gs(s,e){return s===0||e===0}function Us(s,e,t){if(t.size&&e.length){let i=e[0],n=[];if(t.forEach((r,a)=>{i.has(a)||n.push(a),i.set(a,r)}),n.length)for(let r=1;r<e.length;r++){let a=e[r];n.forEach(o=>a.set(o,Xt(s,o)))}}return e}function j(s,e,t){switch(e.type){case E.Trigger:return s.visitTrigger(e,t);case E.State:return s.visitState(e,t);case E.Transition:return s.visitTransition(e,t);case E.Sequence:return s.visitSequence(e,t);case E.Group:return s.visitGroup(e,t);case E.Animate:return s.visitAnimate(e,t);case E.Keyframes:return s.visitKeyframes(e,t);case E.Style:return s.visitStyle(e,t);case E.Reference:return s.visitReference(e,t);case E.AnimateChild:return s.visitAnimateChild(e,t);case E.AnimateRef:return s.visitAnimateRef(e,t);case E.Query:return s.visitQuery(e,t);case E.Stagger:return s.visitStagger(e,t);default:throw cs(e.type)}}function Xt(s,e){return window.getComputedStyle(s)[e]}var Ws=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]),Je=class extends he{normalizePropertyName(e,t){return Wt(e)}normalizeStyleValue(e,t,i,n){let r="",a=i.toString().trim();if(Ws.has(t)&&i!==0&&i!=="0")if(typeof i=="number")r="px";else{let o=i.match(/^[+-]?[\d\.]+([a-z]*)$/);o&&o[1].length==0&&n.push(us(e,i))}return a+r}};var Ye="*";function Xs(s,e){let t=[];return typeof s=="string"?s.split(/\s*,\s*/).forEach(i=>Hs(i,t,e)):t.push(s),t}function Hs(s,e,t){if(s[0]==":"){let l=Js(s,t);if(typeof l=="function"){e.push(l);return}s=l}let i=s.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(i==null||i.length<4)return t.push(Es(s)),e;let n=i[1],r=i[2],a=i[3];e.push(ln(n,a));let o=n==Ye&&a==Ye;r[0]=="<"&&!o&&e.push(ln(a,n))}function Js(s,e){switch(s){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(t,i)=>parseFloat(i)>parseFloat(t);case":decrement":return(t,i)=>parseFloat(i)<parseFloat(t);default:return e.push(Ts(s)),"* => *"}}var Qe=new Set(["true","1"]),Ge=new Set(["false","0"]);function ln(s,e){let t=Qe.has(s)||Ge.has(s),i=Qe.has(e)||Ge.has(e);return(n,r)=>{let a=s==Ye||s==n,o=e==Ye||e==r;return!a&&t&&typeof n=="boolean"&&(a=n?Qe.has(s):Ge.has(s)),!o&&i&&typeof r=="boolean"&&(o=r?Qe.has(e):Ge.has(e)),a&&o}}var wn=":self",Ys=new RegExp(`s*${wn}s*,?`,"g");function kn(s,e,t,i){return new It(s).build(e,t,i)}var cn="",It=class{_driver;constructor(e){this._driver=e}build(e,t,i){let n=new Ot(t);return this._resetContextStyleTimingState(n),j(this,Te(e),n)}_resetContextStyleTimingState(e){e.currentQuerySelector=cn,e.collectedStyles=new Map,e.collectedStyles.set(cn,new Map),e.currentTime=0}visitTrigger(e,t){let i=t.queryCount=0,n=t.depCount=0,r=[],a=[];return e.name.charAt(0)=="@"&&t.errors.push(ps()),e.definitions.forEach(o=>{if(this._resetContextStyleTimingState(t),o.type==E.State){let l=o,c=l.name;c.toString().split(/\s*,\s*/).forEach(p=>{l.name=p,r.push(this.visitState(l,t))}),l.name=c}else if(o.type==E.Transition){let l=this.visitTransition(o,t);i+=l.queryCount,n+=l.depCount,a.push(l)}else t.errors.push(ds())}),{type:E.Trigger,name:e.name,states:r,transitions:a,queryCount:i,depCount:n,options:null}}visitState(e,t){let i=this.visitStyle(e.styles,t),n=e.options&&e.options.params||null;if(i.containsDynamicStyles){let r=new Set,a=n||{};i.styles.forEach(o=>{o instanceof Map&&o.forEach(l=>{Tn(l).forEach(c=>{a.hasOwnProperty(c)||r.add(c)})})}),r.size&&t.errors.push(ms(e.name,[...r.values()]))}return{type:E.State,name:e.name,style:i,options:n?{params:n}:null}}visitTransition(e,t){t.queryCount=0,t.depCount=0;let i=j(this,Te(e.animation),t),n=Xs(e.expr,t.errors);return{type:E.Transition,matchers:n,animation:i,queryCount:t.queryCount,depCount:t.depCount,options:pe(e.options)}}visitSequence(e,t){return{type:E.Sequence,steps:e.steps.map(i=>j(this,i,t)),options:pe(e.options)}}visitGroup(e,t){let i=t.currentTime,n=0,r=e.steps.map(a=>{t.currentTime=i;let o=j(this,a,t);return n=Math.max(n,t.currentTime),o});return t.currentTime=n,{type:E.Group,steps:r,options:pe(e.options)}}visitAnimate(e,t){let i=ir(e.timings,t.errors);t.currentAnimateTimings=i;let n,r=e.styles?e.styles:mt({});if(r.type==E.Keyframes)n=this.visitKeyframes(r,t);else{let a=e.styles,o=!1;if(!a){o=!0;let c={};i.easing&&(c.easing=i.easing),a=mt(c)}t.currentTime+=i.duration+i.delay;let l=this.visitStyle(a,t);l.isEmptyStep=o,n=l}return t.currentAnimateTimings=null,{type:E.Animate,timings:i,style:n,options:null}}visitStyle(e,t){let i=this._makeStyleAst(e,t);return this._validateStyleAst(i,t),i}_makeStyleAst(e,t){let i=[],n=Array.isArray(e.styles)?e.styles:[e.styles];for(let o of n)typeof o=="string"?o===Z?i.push(o):t.errors.push(hs(o)):i.push(new Map(Object.entries(o)));let r=!1,a=null;return i.forEach(o=>{if(o instanceof Map&&(o.has("easing")&&(a=o.get("easing"),o.delete("easing")),!r)){for(let l of o.values())if(l.toString().indexOf(Sn)>=0){r=!0;break}}}),{type:E.Style,styles:i,easing:a,offset:e.offset,containsDynamicStyles:r,options:null}}_validateStyleAst(e,t){let i=t.currentAnimateTimings,n=t.currentTime,r=t.currentTime;i&&r>0&&(r-=i.duration+i.delay),e.styles.forEach(a=>{typeof a!="string"&&a.forEach((o,l)=>{let c=t.collectedStyles.get(t.currentQuerySelector),p=c.get(l),u=!0;p&&(r!=n&&r>=p.startTime&&n<=p.endTime&&(t.errors.push(fs(l,p.startTime,p.endTime,r,n)),u=!1),r=p.startTime),u&&c.set(l,{startTime:r,endTime:n}),t.options&&qs(o,t.options,t.errors)})})}visitKeyframes(e,t){let i={type:E.Keyframes,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push(gs()),i;let n=1,r=0,a=[],o=!1,l=!1,c=0,p=e.steps.map(D=>{let I=this._makeStyleAst(D,t),$=I.offset!=null?I.offset:tr(I.styles),R=0;return $!=null&&(r++,R=I.offset=$),l=l||R<0||R>1,o=o||R<c,c=R,a.push(R),I});l&&t.errors.push(ys()),o&&t.errors.push(_s());let u=e.steps.length,S=0;r>0&&r<u?t.errors.push(bs()):r==0&&(S=n/(u-1));let b=u-1,h=t.currentTime,_=t.currentAnimateTimings,M=_.duration;return p.forEach((D,I)=>{let $=S>0?I==b?1:S*I:a[I],R=$*M;t.currentTime=h+_.delay+R,_.duration=R,this._validateStyleAst(D,t),D.offset=$,i.styles.push(D)}),i}visitReference(e,t){return{type:E.Reference,animation:j(this,Te(e.animation),t),options:pe(e.options)}}visitAnimateChild(e,t){return t.depCount++,{type:E.AnimateChild,options:pe(e.options)}}visitAnimateRef(e,t){return{type:E.AnimateRef,animation:this.visitReference(e.animation,t),options:pe(e.options)}}visitQuery(e,t){let i=t.currentQuerySelector,n=e.options||{};t.queryCount++,t.currentQuery=e;let[r,a]=Zs(e.selector);t.currentQuerySelector=i.length?i+" "+r:r,q(t.collectedStyles,t.currentQuerySelector,new Map);let o=j(this,Te(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=i,{type:E.Query,selector:r,limit:n.limit||0,optional:!!n.optional,includeSelf:a,animation:o,originalSelector:e.selector,options:pe(e.options)}}visitStagger(e,t){t.currentQuery||t.errors.push(vs());let i=e.timings==="full"?{duration:0,delay:0,easing:"full"}:He(e.timings,t.errors,!0);return{type:E.Stagger,animation:j(this,Te(e.animation),t),timings:i,options:null}}};function Zs(s){let e=!!s.split(/\s*,\s*/).find(t=>t==wn);return e&&(s=s.replace(Ys,"")),s=s.replace(/@\*/g,Xe).replace(/@\w+/g,t=>Xe+"-"+t.slice(1)).replace(/:animating/g,xt),[s,e]}function er(s){return s?xe({},s):null}var Ot=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(e){this.errors=e}};function tr(s){if(typeof s=="string")return null;let e=null;if(Array.isArray(s))s.forEach(t=>{if(t instanceof Map&&t.has("offset")){let i=t;e=parseFloat(i.get("offset")),i.delete("offset")}});else if(s instanceof Map&&s.has("offset")){let t=s;e=parseFloat(t.get("offset")),t.delete("offset")}return e}function ir(s,e){if(s.hasOwnProperty("duration"))return s;if(typeof s=="number"){let r=He(s,e).duration;return wt(r,0,"")}let t=s;if(t.split(/\s+/).some(r=>r.charAt(0)=="{"&&r.charAt(1)=="{")){let r=wt(0,0,"");return r.dynamic=!0,r.strValue=t,r}let n=He(t,e);return wt(n.duration,n.delay,n.easing)}function pe(s){return s?(s=xe({},s),s.params&&(s.params=er(s.params))):s={},s}function wt(s,e,t){return{duration:s,delay:e,easing:t}}function Ht(s,e,t,i,n,r,a=null,o=!1){return{type:1,element:s,keyframes:e,preStyleProps:t,postStyleProps:i,duration:n,delay:r,totalTime:n+r,easing:a,subTimeline:o}}var Ae=class{_map=new Map;get(e){return this._map.get(e)||[]}append(e,t){let i=this._map.get(e);i||this._map.set(e,i=[]),i.push(...t)}has(e){return this._map.has(e)}clear(){this._map.clear()}},nr=1,sr=":enter",rr=new RegExp(sr,"g"),ar=":leave",or=new RegExp(ar,"g");function An(s,e,t,i,n,r=new Map,a=new Map,o,l,c=[]){return new Lt().buildKeyframes(s,e,t,i,n,r,a,o,l,c)}var Lt=class{buildKeyframes(e,t,i,n,r,a,o,l,c,p=[]){c=c||new Ae;let u=new Rt(e,t,c,n,r,p,[]);u.options=l;let S=l.delay?ie(l.delay):0;u.currentTimeline.delayNextStep(S),u.currentTimeline.setStyles([a],null,u.errors,l),j(this,i,u);let b=u.timelines.f