UNPKG

sksim

Version:

Signal K data stream generator.

86 lines (84 loc) 99.1 kB
import"./chunk-WIMMYXP7.js";import"./chunk-BVHOVPJI.js";import{$ as W,$b as Zi,A as mi,Aa as yi,Ab as Qe,Ba as _i,Ca as je,Cb as $i,Da as Si,Ea as bi,Eb as Vi,F as St,Fa as vi,Fb as zi,Ga as Ei,Gb as Ki,H as A,Ha as Ti,Ib as Bi,J as fi,Jb as qi,Kb as ji,L as H,La as wi,Ma as Ai,N as ze,Na as ki,O as le,Oa as Mi,Pa as Ci,Qa as Pi,Ra as Tt,Rb as Gi,Sb as Qi,T as V,Tb as Ui,U as z,Ub as Wi,V as Ke,Vb as Xi,W as Be,Wb as Hi,X as qe,Xb as Ue,Y as G,Yb as Yi,Z as h,_ as y,_b as Ji,aa as Q,ac as en,ba as O,bc as tn,ca as D,dc as nn,ec as sn,fc as rn,gb as Ge,gc as an,hb as Di,hc as on,ia as ne,ic as ln,jc as cn,la as b,lb as Ni,ma as Se,na as gi,o as w,p as Ie,pa as bt,q as oe,qa as vt,ra as Et,s as $e,t as Ve,tb as xi,u as C,v as P,vb as Fi,wb as Oi,xb as Li,y as hi,yb as Ri,zb as Ii}from"./chunk-JLPHQ5CD.js";import{a as Re,c as pi}from"./chunk-EQDQRRRY.js";var gs=[{path:"home",loadChildren:()=>import("./chunk-5DFODF7R.js").then(s=>s.HomePageModule)},{path:"settings",loadChildren:()=>import("./chunk-WXH5P3X2.js").then(s=>s.SettingsPageModule)},{path:"",redirectTo:"home",pathMatch:"full"},{path:"**",redirectTo:"home",pathMatch:"full"}],un=(()=>{class s{static \u0275fac=function(i){return new(i||s)};static \u0275mod=le({type:s});static \u0275inj=oe({imports:[Tt.forRoot(gs,{anchorScrolling:"enabled"}),Tt]})}return s})();var We=class{version="";creator="";wpt=[];rte=[];trk=[];extensions={};metadata=new He;x2js=new nn;constructor(){this.init()}init(){this.version="1.1",this.creator="@panaaj",this.wpt=[],this.rte=[],this.trk=[],this.extensions={},this.metadata=new He}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 Mt,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 Pt,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 ke;n.href=i._href,n.text=i.text,n.type=i.type,t.push(n)});else{let i=new ke;i.href=e._href,i.text=e.text,i.type=e.type,t.push(i)}return t}toRte(e){let t=new At;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 wt;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:Nt.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 kt;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 Xe;n.extensions=i.extensions?this.parseExtensions(i.extensions):{},i.trkpt&&(n.trkpt=this.toPtArray(i.trkpt)),t.trkseg.push(n)});else{let i=new Xe;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}},wt=class{lat=0;lon=0;ele;datetime;magvar;geoidHeight;name;cmt;desc;src;link=[];sym;type;fix=Nt.NONE;sat;hdop;vdop;pdop;ageOfGpsData;dgpsid;extensions={};constructor(e,t){this.lat=e||0,this.lon=t||0}},At=class{name="";cmt="";desc="";src="";link=[];number;type;extensions={};rtept=[];constructor(e){this.name=e||""}},kt=class{name="";cmt="";desc="";src="";link=[];number;type="";extensions={};trkseg=[];constructor(e){this.name=e||""}},Xe=class{trkpt=[];extensions={};constructor(){}},Nt=(function(s){return s.NONE="none",s["2D"]="2d",s["3D"]="3d",s.DGPS="dgps",s.PPS="pps",s})(Nt||{}),He=class{name="";desc="";author;copyright;link=[];time=new Date().toISOString();keywords="";bounds=new Dt;extensions;constructor(){}},ke=class{href="";text="";type="";constructor(){}},Mt=class{name="";email=new Ct;link=new ke;constructor(){}},Ct=class{id="";domain="";constructor(){}},Pt=class{author="";license="";year="";constructor(){}},Dt=class{minLat=90;minLon=180;maxLat=-90;maxLon=-180;constructor(){}};function Es(s,e){s&1&&(h(0,"div",7)(1,"div")(2,"b"),b(3,"Invalid GPX Data:"),y(),W(4,"br")(5,"br"),h(6,"i"),b(7,"Selected file does not contain GPX data or"),W(8,"br"),b(9," does not correctly implement namespaced <extensions> attributes."),y()()())}function Ts(s,e){s&1&&(h(0,"div",7)(1,"div")(2,"b"),b(3,"No Track Data:"),y(),W(4,"br")(5,"br"),h(6,"i"),b(7,"Selected file does not contain any Tracks."),W(8,"br"),b(9," Please select a GPX file containing Track data."),y()()())}function ws(s,e){if(s&1){let t=Q();h(0,"mat-list-item",11),O("click",function(){let n=C(t).$index,r=D(2);return P(r.load(n))}),h(1,"span",12)(2,"mat-icon",13),b(3,"show_chart"),y(),b(4),y(),h(5,"span",14)(6,"i"),b(7),y()()()}if(s&2){let t=e.$implicit;A(4),gi(" ",t.name," "),A(3),Se(t.description)}}function As(s,e){if(s&1&&(h(0,"div",8)(1,"div",9)(2,"mat-nav-list"),Be(3,ws,8,2,"mat-list-item",10,Ke),y()()()),s&2){let t=D();A(3),qe(t.gpxData.tracks)}}var dn=(()=>{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 We}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 on;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)(H(Li),H(Ri))};static \u0275cmp=ze({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"],[1,"error"],[1,"dialog-content"],[1,"list-container-scrollable"],[1,"row"],[1,"row",3,"click"],["matLine","",1,"name"],["color","primary"],["matLine",""]],template:function(i,n){i&1&&(h(0,"div",0)(1,"mat-toolbar",1)(2,"span",2)(3,"mat-icon"),W(4,"img",3),y()(),h(5,"span",4),b(6,"Follow Track"),y(),h(7,"span",5)(8,"button",6),O("click",function(){return n.dialogRef.close(null)}),h(9,"mat-icon"),b(10,"close"),y()()()(),V(11,Es,10,0,"div",7),V(12,Ts,10,0,"div",7),V(13,As,5,0,"div",8),y()),i&2&&(A(11),z(n.display.notValid?11:-1),A(),z(n.display.noTracks?12:-1),A(),z(!n.display.notValid&&!n.display.noTracks?13:-1))},dependencies:[Qe,Ge,Ki,zi,Ue],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 ks(s,e){if(s&1){let t=Q();h(0,"button",31),O("click",function(){C(t);let n=D();return P(n.setToStartOfTrack())}),h(1,"mat-icon"),b(2,"settings_backup_restore"),y()()}}function Ms(s,e){if(s&1){let t=Q();h(0,"button",32),O("click",function(){C(t);let n=D();return P(n.clearGPX())}),h(1,"mat-icon"),b(2,"cancel"),y()()}}function Cs(s,e){if(s&1){let t=Q();h(0,"button",33),O("click",function(){C(t);let n=D();return P(n.pauseSim())}),h(1,"mat-icon"),b(2),y()()}if(s&2){let t=D();G("matTooltip",t.navsim.sim.freeze?"Paused. Click to Resume":"Pause"),A(2),Se(t.navsim.sim.freeze?"skip_next":"pause")}}function Ps(s,e){if(s&1){let t=Q();h(0,"button",34),O("click",function(){C(t);let n=D();return P(n.checkPluginStatus())}),h(1,"mat-icon"),b(2,"refresh"),y()()}}function Ds(s,e){if(s&1){let t=Q();h(0,"button",35),O("click",function(){C(t);let n=D();return P(n.startSim())}),h(1,"mat-icon"),b(2,"play_arrow"),y()()}if(s&2){let t=D();G("disabled",!t.display.pluginReady)}}function Ns(s,e){if(s&1){let t=Q();h(0,"button",36),O("click",function(){C(t);let n=D();return P(n.stopSim())}),h(1,"mat-icon"),b(2,"stop"),y()()}}function xs(s,e){if(s&1){let t=Q();h(0,"ap-file-input",37),O("chosen",function(n){C(t);let r=D();return P(r.loadGPX(n))})("invalid",function(n){C(t);let r=D();return P(r.invalidGPX(n))}),h(1,"a",38)(2,"mat-icon"),W(3,"img",39),y(),b(4," \xA0Follow GPX Track "),y()()}s&2&&G("astext",!0)("maxfilesize",1e6*1024)}function Fs(s,e){s&1&&(h(0,"mat-error"),b(1," Please enter a valid SignalK path! "),y())}function Os(s,e){s&1&&(h(0,"mat-error"),b(1," Please enter a valid value. "),y())}function Ls(s,e){if(s&1){let t=Q();h(0,"div",45)(1,"div",46)(2,"mat-form-field",47)(3,"input",48,4),Et("ngModelChange",function(n){let r=C(t).$implicit;return vt(r[0],n)||(r[0]=n),P(n)}),O("change",function(){let n=C(t).$index,r=ne(4),a=D(2);return P(a.updateAttrib(r,n))}),y(),V(5,Fs,2,0,"mat-error"),y()(),h(6,"div",49)(7,"mat-form-field",50)(8,"input",51,5),Et("ngModelChange",function(n){let r=C(t).$implicit;return vt(r[1],n)||(r[1]=n),P(n)}),O("change",function(){let n=C(t).$index,r=ne(9),a=D(2);return P(a.updateAttrib(r,n))}),y(),V(10,Os,2,0,"mat-error"),y()(),h(11,"div",52)(12,"button",53),O("click",function(){let n=C(t).$index,r=D(2);return P(r.deleteAttrib(n))}),h(13,"mat-icon",54),b(14,"clear"),y()()()()}if(s&2){let t=e.$implicit,i=ne(4),n=ne(9),r=D(2);A(3),bt("ngModel",t[0]),G("value",t[0])("disabled",r.navsim.sim.isRunning),A(2),z(i.invalid&&(i.dirty||i.touched)?5:-1),A(2),G("hintLabel","Value ("+t[2]+")"),A(),bt("ngModel",t[1]),G("value",t[1])("disabled",!1),A(2),z(n.invalid&&(n.dirty||n.touched)?10:-1)}}function Rs(s,e){if(s&1){let t=Q();h(0,"mat-card",30)(1,"div",40)(2,"span",41),b(3," SignalK Attributes:\xA0 "),y(),h(4,"span",42)(5,"button",43),O("click",function(){C(t);let n=D();return P(n.addAttrib())}),h(6,"span",44),b(7,"ADD"),y(),h(8,"mat-icon"),b(9,"add"),y()()()(),Be(10,Ls,15,9,"div",45,Ke),y()}if(s&2){let t=D();A(5),G("disabled",t.navsim.sim.isRunning),A(5),qe(t.skAttrib)}}var pn=(()=>{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(Zi,{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=an.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(dn,{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)(H(tn),H(Oi),H(rn),H(cn),H(ln),H(Ii),H(Gi))};static \u0275cmp=ze({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."],["mat-icon-button","","matTooltip","Cancel Follow Track"],["mat-icon-button","",3,"matTooltip"],["mat-icon-button","","matTooltip","Check plugin status"],["mat-icon-button","","matTooltip","Start Simulator",3,"disabled"],["mat-icon-button","","matTooltip","Stop Simulator"],["mat-icon-button","",3,"mat-menu-trigger-for"],["matTooltip","Info Menu","matTooltipPosition","below"],[3,"astext","maxfilesize"],["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"],[2,"position","fixed","width","100%","z-index","1000","border","gray 1px solid"],["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"],[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"],[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"],[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=Q();h(0,"div")(1,"div",6)(2,"mat-toolbar",7)(3,"mat-toolbar-row")(4,"a",8),W(5,"img",9),y(),h(6,"span"),b(7),y(),h(8,"span",10),V(9,ks,3,0,"button",11),V(10,Ms,3,0,"button",12),V(11,Cs,3,2,"button",13),V(12,Ps,3,0,"button",14),V(13,Ds,3,1,"button",15),V(14,Ns,3,0,"button",16),h(15,"button",17)(16,"mat-icon"),b(17,"menu"),y()()()()(),h(18,"mat-menu",18,0),V(20,xs,5,2,"ap-file-input",19),h(21,"button",20),O("click",function(){return C(r),P(n.reset())}),h(22,"mat-icon"),b(23,"refresh"),y(),h(24,"span"),b(25,"Reset"),y()(),W(26,"mat-divider"),h(27,"a",21)(28,"mat-icon"),b(29,"help"),y(),h(30,"span"),b(31,"Help"),y()(),h(32,"button",20),O("click",function(){return C(r),P(n.openAbout())}),h(33,"mat-icon",22),W(34,"img",23),y(),h(35,"span"),b(36,"About"),y()()(),h(37,"nav",24)(38,"a",25,1)(40,"b")(41,"mat-icon"),b(42,"dashboard"),y(),b(43,"\xA0Dashboard"),y()(),h(44,"a",26,2)(46,"b")(47,"mat-icon"),b(48,"settings"),y(),b(49,"\xA0Settings"),y()(),h(50,"a",27),O("click",function(){return C(r),P(n.toggleAttributes())}),h(51,"b")(52,"mat-icon"),b(53),y()(),b(54,"\xA0Attributes "),y()(),h(55,"div",28)(56,"div",29),V(57,Rs,12,1,"mat-card",30),h(58,"mat-tab-nav-panel",null,3),W(60,"router-outlet"),y()()()()()}if(i&2){let r=ne(19),a=ne(39),o=ne(45),l=ne(59);A(7),Se(n.app.name),A(2),z(!n.navsim.sim.isRunning&&n.app.data.trackLoaded?9:-1),A(),z(!n.navsim.sim.isRunning&&n.app.data.trackLoaded?10:-1),A(),z(n.navsim.sim.isRunning?11:-1),A(),z(n.display.pluginReady?-1:12),A(),z(n.navsim.sim.isRunning?-1:13),A(),z(n.navsim.sim.isRunning?14:-1),A(),G("mat-menu-trigger-for",r),A(5),z(n.navsim.sim.isRunning?-1:20),A(17),G("tabPanel",l),A(),G("active",a.isActive),A(6),G("active",o.isActive),A(6),G("active",!1),A(3),Se(n.display.skAttrib?"keyboard_arrow_down":"keyboard_arrow_right"),A(4),z(n.display.skAttrib?57:-1)}},dependencies:[vi,Ei,wi,Ai,Ti,Mi,Ci,Pi,qi,Bi,ji,Fi,xi,Ue,Hi,Ni,$i,Di,Ge,Vi,Qe,Yi,Qi,Wi,Ui,en],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})();var v=(function(s){return s[s.State=0]="State",s[s.Transition=1]="Transition",s[s.Sequence=2]="Sequence",s[s.Group=3]="Group",s[s.Animate=4]="Animate",s[s.Keyframes=5]="Keyframes",s[s.Style=6]="Style",s[s.Trigger=7]="Trigger",s[s.Reference=8]="Reference",s[s.AnimateChild=9]="AnimateChild",s[s.AnimateRef=10]="AnimateRef",s[s.Query=11]="Query",s[s.Stagger=12]="Stagger",s})(v||{}),Y="*";function hn(s,e=null){return{type:v.Sequence,steps:s,options:e}}function xt(s){return{type:v.Style,styles:s,offset:null}}var se=class{_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_originalOnDoneFns=[];_originalOnStartFns=[];_started=!1;_destroyed=!1;_finished=!1;_position=0;parentPlayer=null;totalTime;constructor(e=0,t=0){this.totalTime=e+t}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){let t=e=="start"?this._onStartFns:this._onDoneFns;t.forEach(i=>i()),t.length=0}},ve=class{_onDoneFns=[];_onStartFns=[];_finished=!1;_started=!1;_destroyed=!1;_onDestroyFns=[];parentPlayer=null;totalTime=0;players;constructor(e){this.players=e;let t=0,i=0,n=0,r=this.players.length;r==0?queueMicrotask(()=>this._onFinish()):this.players.forEach(a=>{a.onDone(()=>{++t==r&&this._onFinish()}),a.onDestroy(()=>{++i==r&&this._onDestroy()}),a.onStart(()=>{++n==r&&this._onStart()})}),this.totalTime=this.players.reduce((a,o)=>Math.max(a,o.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){let t=e*this.totalTime;this.players.forEach(i=>{let n=i.totalTime?Math.min(1,t/i.totalTime):1;i.setPosition(n)})}getPosition(){let e=this.players.reduce((t,i)=>t===null||i.totalTime>t.totalTime?i:t,null);return e!=null?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){let t=e=="start"?this._onStartFns:this._onDoneFns;t.forEach(i=>i()),t.length=0}},Me="!";function mn(s){return new w(3e3,!1)}function Is(){return new w(3100,!1)}function $s(){return new w(3101,!1)}function Vs(s){return new w(3001,!1)}function zs(s){return new w(3003,!1)}function Ks(s){return new w(3004,!1)}function gn(s,e){return new w(3005,!1)}function yn(){return new w(3006,!1)}function _n(){return new w(3007,!1)}function Sn(s,e){return new w(3008,!1)}function bn(s){return new w(3002,!1)}function vn(s,e,t,i,n){return new w(3010,!1)}function En(){return new w(3011,!1)}function Tn(){return new w(3012,!1)}function wn(){return new w(3200,!1)}function An(){return new w(3202,!1)}function kn(){return new w(3013,!1)}function Mn(s){return new w(3014,!1)}function Cn(s){return new w(3015,!1)}function Pn(s){return new w(3016,!1)}function Dn(s,e){return new w(3404,!1)}function Bs(s){return new w(3502,!1)}function Nn(s){return new w(3503,!1)}function xn(){return new w(3300,!1)}function Fn(s){return new w(3504,!1)}function On(s){return new w(3301,!1)}function Ln(s,e){return new w(3302,!1)}function Rn(s){return new w(3303,!1)}function In(s,e){return new w(3400,!1)}function $n(s){return new w(3401,!1)}function Vn(s){return new w(3402,!1)}function zn(s,e){return new w(3505,!1)}function re(s){switch(s.length){case 0:return new se;case 1:return s[0];default:return new ve(s)}}function Rt(s,e,t=new Map,i=new Map){let n=[],r=[],a=-1,o=null;if(e.forEach(l=>{let c=l.get("offset"),d=c==a,u=d&&o||new Map;l.forEach((E,S)=>{let m=S,_=E;if(S!=="offset")switch(m=s.normalizePropertyName(m,n),_){case Me:_=t.get(S);break;case Y:_=i.get(S);break;default:_=s.normalizeStyleValue(S,m,_,n);break}u.set(m,_)}),d||r.push(u),o=u,a=c}),n.length)throw Bs(n);return r}function Ye(s,e,t,i){switch(e){case"start":s.onStart(()=>i(t&&Ft(t,"start",s)));break;case"done":s.onDone(()=>i(t&&Ft(t,"done",s)));break;case"destroy":s.onDestroy(()=>i(t&&Ft(t,"destroy",s)));break}}function Ft(s,e,t){let i=t.totalTime,n=!!t.disabled,r=Je(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 Je(s,e,t,i,n="",r=0,a){return{element:s,triggerName:e,fromState:t,toState:i,phaseName:n,totalTime:r,disabled:!!a}}function B(s,e,t){let i=s.get(e);return i||s.set(e,i=t),i}function It(s){let e=s.indexOf(":"),t=s.substring(1,e),i=s.slice(e+1);return[t,i]}var qs=typeof document>"u"?null:document.documentElement;function Ze(s){let e=s.parentNode||s.host||null;return e===qs?null:e}function js(s){return s.substring(1,6)=="ebkit"}var he=null,fn=!1;function Kn(s){he||(he=Gs()||{},fn=he.style?"WebkitAppearance"in he.style:!1);let e=!0;return he.style&&!js(s)&&(e=s in he.style,!e&&fn&&(e="Webkit"+s.charAt(0).toUpperCase()+s.slice(1)in he.style)),e}function Gs(){return typeof document<"u"?document.body:null}function $t(s,e){for(;e;){if(e===s)return!0;e=Ze(e)}return!1}function Vt(s,e,t){if(t)return Array.from(s.querySelectorAll(e));let i=s.querySelector(e);return i?[i]:[]}var Qs=1e3,zt="{{",Us="}}",Kt="ng-enter",et="ng-leave",Ce="ng-trigger",Pe=".ng-trigger",Bt="ng-animating",tt=".ng-animating";function ie(s){if(typeof s=="number")return s;let e=s.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:Ot(parseFloat(e[1]),e[2])}function Ot(s,e){switch(e){case"s":return s*Qs;default:return s}}function De(s,e,t){return s.hasOwnProperty("duration")?s:Xs(s,e,t)}var Ws=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function Xs(s,e,t){let i,n=0,r="";if(typeof s=="string"){let a=s.match(Ws);if(a===null)return e.push(mn(s)),{duration:0,delay:0,easing:""};i=Ot(parseFloat(a[1]),a[2]);let o=a[3];o!=null&&(n=Ot(parseFloat(o),a[4]));let l=a[5];l&&(r=l)}else i=s;if(!t){let a=!1,o=e.length;i<0&&(e.push(Is()),a=!0),n<0&&(e.push($s()),a=!0),a&&e.splice(o,0,mn(s))}return{duration:i,delay:n,easing:r}}function Bn(s){return s.length?s[0]instanceof Map?s:s.map(e=>new Map(Object.entries(e))):[]}function J(s,e,t){e.forEach((i,n)=>{let r=it(n);t&&!t.has(n)&&t.set(n,s.style[r]),s.style[r]=i})}function ce(s,e){e.forEach((t,i)=>{let n=it(i);s.style[n]=""})}function Ee(s){return Array.isArray(s)?s.length==1?s[0]:hn(s):s}function qn(s,e,t){let i=e.params||{},n=qt(s);n.length&&n.forEach(r=>{i.hasOwnProperty(r)||t.push(Vs(r))})}var Lt=new RegExp(`${zt}\\s*(.+?)\\s*${Us}`,"g");function qt(s){let e=[];if(typeof s=="string"){let t;for(;t=Lt.exec(s);)e.push(t[1]);Lt.lastIndex=0}return e}function Te(s,e,t){let i=`${s}`,n=i.replace(Lt,(r,a)=>{let o=e[a];return o==null&&(t.push(zs(a)),o=""),o.toString()});return n==i?s:n}var Hs=/-+([a-z0-9])/g;function it(s){return s.replace(Hs,(...e)=>e[1].toUpperCase())}function jn(s,e){return s===0||e===0}function Gn(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,nt(s,o)))}}return e}function q(s,e,t){switch(e.type){case v.Trigger:return s.visitTrigger(e,t);case v.State:return s.visitState(e,t);case v.Transition:return s.visitTransition(e,t);case v.Sequence:return s.visitSequence(e,t);case v.Group:return s.visitGroup(e,t);case v.Animate:return s.visitAnimate(e,t);case v.Keyframes:return s.visitKeyframes(e,t);case v.Style:return s.visitStyle(e,t);case v.Reference:return s.visitReference(e,t);case v.AnimateChild:return s.visitAnimateChild(e,t);case v.AnimateRef:return s.visitAnimateRef(e,t);case v.Query:return s.visitQuery(e,t);case v.Stagger:return s.visitStagger(e,t);default:throw Ks(e.type)}}function nt(s,e){return window.getComputedStyle(s)[e]}var ai=(()=>{class s{validateStyleProperty(t){return Kn(t)}containsElement(t,i){return $t(t,i)}getParentElement(t){return Ze(t)}query(t,i,n){return Vt(t,i,n)}computeStyle(t,i,n){return n||""}animate(t,i,n,r,a,o=[],l){return new se(n,r)}static \u0275fac=function(i){return new(i||s)};static \u0275prov=Ie({token:s,factory:s.\u0275fac})}return s})(),fe=class{static NOOP=new ai},ge=class{};var Ys=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"]),lt=class extends ge{normalizePropertyName(e,t){return it(e)}normalizeStyleValue(e,t,i,n){let r="",a=i.toString().trim();if(Ys.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(gn(e,i))}return a+r}};var ct="*";function Js(s,e){let t=[];return typeof s=="string"?s.split(/\s*,\s*/).forEach(i=>Zs(i,t,e)):t.push(s),t}function Zs(s,e,t){if(s[0]==":"){let l=er(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(Cn(s)),e;let n=i[1],r=i[2],a=i[3];e.push(Qn(n,a));let o=n==ct&&a==ct;r[0]=="<"&&!o&&e.push(Qn(a,n))}function er(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(Pn(s)),"* => *"}}var st=new Set(["true","1"]),rt=new Set(["false","0"]);function Qn(s,e){let t=st.has(s)||rt.has(s),i=st.has(e)||rt.has(e);return(n,r)=>{let a=s==ct||s==n,o=e==ct||e==r;return!a&&t&&typeof n=="boolean"&&(a=n?st.has(s):rt.has(s)),!o&&i&&typeof r=="boolean"&&(o=r?st.has(e):rt.has(e)),a&&o}}var is=":self",tr=new RegExp(`s*${is}s*,?`,"g");function ns(s,e,t,i){return new Xt(s).build(e,t,i)}var Un="",Xt=class{_driver;constructor(e){this._driver=e}build(e,t,i){let n=new Ht(t);return this._resetContextStyleTimingState(n),q(this,Ee(e),n)}_resetContextStyleTimingState(e){e.currentQuerySelector=Un,e.collectedStyles=new Map,e.collectedStyles.set(Un,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(yn()),e.definitions.forEach(o=>{if(this._resetContextStyleTimingState(t),o.type==v.State){let l=o,c=l.name;c.toString().split(/\s*,\s*/).forEach(d=>{l.name=d,r.push(this.visitState(l,t))}),l.name=c}else if(o.type==v.Transition){let l=this.visitTransition(o,t);i+=l.queryCount,n+=l.depCount,a.push(l)}else t.errors.push(_n())}),{type:v.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=>{qt(l).forEach(c=>{a.hasOwnProperty(c)||r.add(c)})})}),r.size&&t.errors.push(Sn(e.name,[...r.values()]))}return{type:v.State,name:e.name,style:i,options:n?{params:n}:null}}visitTransition(e,t){t.queryCount=0,t.depCount=0;let i=q(this,Ee(e.animation),t),n=Js(e.expr,t.errors);return{type:v.Transition,matchers:n,animation:i,queryCount:t.queryCount,depCount:t.depCount,options:me(e.options)}}visitSequence(e,t){return{type:v.Sequence,steps:e.steps.map(i=>q(this,i,t)),options:me(e.options)}}visitGroup(e,t){let i=t.currentTime,n=0,r=e.steps.map(a=>{t.currentTime=i;let o=q(this,a,t);return n=Math.max(n,t.currentTime),o});return t.currentTime=n,{type:v.Group,steps:r,options:me(e.options)}}visitAnimate(e,t){let i=rr(e.timings,t.errors);t.currentAnimateTimings=i;let n,r=e.styles?e.styles:xt({});if(r.type==v.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=xt(c)}t.currentTime+=i.duration+i.delay;let l=this.visitStyle(a,t);l.isEmptyStep=o,n=l}return t.currentAnimateTimings=null,{type:v.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===Y?i.push(o):t.errors.push(bn(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(zt)>=0){r=!0;break}}}),{type:v.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),d=c.get(l),u=!0;d&&(r!=n&&r>=d.startTime&&n<=d.endTime&&(t.errors.push(vn(l,d.startTime,d.endTime,r,n)),u=!1),r=d.startTime),u&&c.set(l,{startTime:r,endTime:n}),t.options&&qn(o,t.options,t.errors)})})}visitKeyframes(e,t){let i={type:v.Keyframes,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push(En()),i;let n=1,r=0,a=[],o=!1,l=!1,c=0,d=e.steps.map(N=>{let x=this._makeStyleAst(N,t),I=x.offset!=null?x.offset:sr(x.styles),L=0;return I!=null&&(r++,L=x.offset=I),l=l||L<0||L>1,o=o||L<c,c=L,a.push(L),x});l&&t.errors.push(Tn()),o&&t.errors.push(wn());let u=e.steps.length,E=0;r>0&&r<u?t.errors.push(An()):r==0&&(E=n/(u-1));let S=u-1,m=t.currentTime,_=t.currentAnimateTimings,k=_.duration;return d.forEach((N,x)=>{let I=E>0?x==S?1:E*x:a[x